home *** CD-ROM | disk | FTP | other *** search
/ Scene Storm / Scene Storm - Volume 1.iso / coding / asm / music / protracker / pt.lzh / PT1.2.asm < prev    next >
Assembly Source File  |  1991-12-18  |  348KB  |  19,805 lines

  1. **********************************************************
  2. *                                                        *
  3. *  Protracker Version 1.2 - Release A                    *
  4. *  Amiga Freelancers 1991                                *
  5. *                                                        *
  6. *  Based on Soundtracker V2.5 / Noisetracker x.x)        *
  7. *  Coding by Lars Hamre                                  *
  8. *  with some "Resource" help from Anders Hamre           *
  9. *  Thanks to Rune, and a hi there to Sven, Morten,       *
  10. *  Per and Torgeir.                                      *
  11. *                                                        *
  12. *--------------------------------------------------------*
  13. *  First Update   1.0 : 04/05-1990 First version         *
  14. * Middle Update   1.0 : 13/08-1990 -                     *
  15. *   Last Update   1.0 : 25/08-1990 -                     *
  16. * Final Version   1.0 : 26/08-1990 Released to Crusaders *
  17. * Rev. B Update 1 1.0B: 29/08-1990 -                     *
  18. * Rev. B Update 2 1.0B: 06/09-1990 Released to Crusaders *
  19. * Rev. C Update 1 1.0C: 16/10-1990 -                     *
  20. * Rev. C Update 2 1.0C: 18/10-1990 -                     *
  21. * Start V1.1A     1.1A: 23/10-1990 Second version        *
  22. * Rev. C Update 3 1.0C: 06/11-1990 Released to Crusaders *
  23. * Rev. A Update 1 1.1A: 15/11-1990 InputEvent Handler    *
  24. * Rev. A Update 2 1.1A: 21/11-1990 RunBack Hunk, KbdBuf. *
  25. * Rev. A Update 3 1.1A: 02/12-1990 iffld,loopspr,scopefix*
  26. * Rev. A Update 4 1.1A: 05/12-1990 virusattack,dirbrowse *
  27. * Rev. A Update 5 1.1A: 20/12-1990 Testversion to Awesome*
  28. * Rev. A Update 6 1.1A: 27/12-1990 Party-release (w/bugs)*
  29. * Rev. B Update 1 1.1B: 01/01-1991 Bugfixing...          *
  30. * Rev. B Update 2 1.1B: 05/01-1991 ---                   *
  31. * Rev. B Update 3 1.1B: 08/01-1991 ScopeGfx, loadbug.    *
  32. * Start V2.0A     2.0A: 12/02-1991 Wow! a new version... *
  33. * Start V1.2A     1.2A: 13/07-1991 Kick 37.175 version   *
  34. **********************************************************
  35.  
  36. ; FileFormat
  37. sd_songname    EQU    0
  38. sd_sampleinfo    EQU    20
  39. sd_numofpatt    EQU    950
  40. sd_pattpos    EQU    952
  41. sd_mahokakt    EQU    1080
  42. sd_patterndata    EQU    1084
  43.  
  44. ; audXtemp offsets
  45. n_note        EQU    0  ; W
  46. n_cmd        EQU    2  ; W
  47. n_cmdlo        EQU    3  ; low B of cmd
  48. n_start        EQU    4  ; L
  49. n_length    EQU    8  ; W
  50. n_loopstart    EQU    10 ; L
  51. n_replen    EQU    14 ; W
  52. n_period    EQU    16 ; W
  53. n_finetune    EQU    18 ; B
  54. n_volume    EQU    19 ; B
  55. n_dmabit    EQU    20 ; W
  56. n_toneportdirec    EQU    22 ; B
  57. n_toneportspeed    EQU    23 ; B
  58. n_wantedperiod    EQU    24 ; W
  59. n_vibratocmd    EQU    26 ; B
  60. n_vibratopos    EQU    27 ; B
  61. n_tremolocmd    EQU    28 ; B
  62. n_tremolopos    EQU    29 ; B
  63. n_wavecontrol    EQU    30 ; B
  64. n_glissfunk    EQU    31 ; B
  65. n_sampleoffset    EQU    32 ; B
  66. n_pattpos    EQU    33 ; B
  67. n_loopcount    EQU    34 ; B
  68. n_funkoffset    EQU    35 ; B
  69. n_wavestart    EQU    36 ; L
  70. n_reallength    EQU    40 ; W
  71. n_trigger    EQU    42 ; B
  72. n_samplenum    EQU    43 ; B
  73.  
  74. ; Exec Library Offsets
  75. LVOFindTask    EQU    -294
  76. LVOFindName    EQU    -276
  77. LVOForbid    EQU    -132
  78. LVOPermit    EQU    -138
  79. LVOAddPort    EQU    -354
  80. LVORemPort    EQU    -360
  81. LVOWaitPort    EQU    -384
  82. LVOOpenLibrary    EQU    -552
  83. LVOCloseLibrary    EQU    -414
  84. LVOOpenDevice    EQU    -444
  85. LVOCloseDevice    EQU    -450
  86. LVODoIO        EQU    -456
  87. LVOSendIO    EQU    -462
  88. LVOGetMsg    EQU    -372
  89. LVOReplyMsg    EQU    -378
  90. LVOAllocMem    EQU    -198
  91. LVOAllocAbs    EQU    -204
  92. LVOFreeMem    EQU    -210
  93. LVOAvailMem    EQU    -216
  94. LVOAddIntServer    EQU    -168
  95. LVORemIntServer    EQU    -174
  96. LVOOpenResource    EQU    -498
  97. LVOSetFunction    EQU    -420
  98. LVOSetIntVector    EQU    -162
  99. LVORemDevice    EQU    -438
  100.  
  101. ; CIA Resource Offsets
  102. AddICRVector    EQU    -6
  103. RemICRVector    EQU    -12
  104.  
  105. ; DOS Library Offsets
  106. LVOOpen        EQU    -30
  107. LVOClose    EQU    -36
  108. LVORead        EQU    -42
  109. LVOWrite    EQU    -48
  110. LVODeleteFile    EQU    -72
  111. LVORename    EQU    -78
  112. LVOLock        EQU    -84
  113. LVOUnLock    EQU    -90
  114. LVOExamine    EQU    -102
  115. LVOExNext    EQU    -108
  116. LVOInfo        EQU    -114
  117. LVOIoErr    EQU    -132
  118. LVOSeek        EQU    -66
  119. LVOCreateDir    EQU    -120
  120. LVOCurrentDir    EQU    -126
  121. LVODateStamp    EQU    -192
  122. LVODelay    EQU    -198
  123. LVOExecute    EQU    -222
  124. LVOUnLoadSeg    EQU    -156
  125.  
  126.  
  127. ; Intuition Library Offsets
  128. LVOAutoRequest      EQU    -348
  129. LVODisplayAlert   EQU    -90      
  130. LVOOpenWorkbench  EQU    -210
  131. LVOCloseWorkbench EQU    -78
  132. LVOWBenchToFront  EQU    -342
  133.  
  134. ; Graphics Library Offsets
  135. LVOBltBitMap    EQU    -30
  136. LVOWaitBlit    EQU    -228
  137. LVOOwnBlitter    EQU    -456
  138. LVODisownBlitter EQU    -462
  139.  
  140. ; DateStamp
  141. ofib_DateStamp    EQU    $84
  142. ds_Days        EQU    $00
  143. ds_Minute    EQU    $04
  144. ds_Tick        EQU    $08
  145.  
  146. ; Memory Alloc Flags
  147. MEMF_PUBLIC    EQU    $0001
  148. MEMF_CHIP    EQU    $0002
  149. MEMF_FAST    EQU    $0004
  150. MEMF_CLEAR    EQU    $10000
  151. MEMF_LARGEST    EQU    $20000
  152.  
  153. ; IO Block Offsets
  154. IO_COMMAND    EQU    $1C
  155. IO_FLAGS    EQU    $1E
  156. IO_ACTUAL    EQU    $20
  157. IO_LENGTH    EQU    $24
  158. IO_DATA        EQU    $28
  159. IO_OFFSET    EQU    $2C
  160.  
  161. ; Device Commands 
  162. CMD_READ    EQU    $2
  163. CMD_WRITE    EQU    $3
  164. CMD_UPDATE    EQU    $4
  165. TD_MOTOR    EQU    $9
  166. TD_FORMAT    EQU    $B
  167. TD_CHANGESTATE    EQU    $E
  168. TD_PROTSTATUS    EQU    $F
  169.  
  170.     INCDIR    "dh0:devpac/include/"
  171.     INCLUDE    "exec/execbase.i"
  172.  
  173.  
  174. DirNameLength        EQU    30
  175. ConfigFileSize        EQU    1024
  176. KeyBufSize        EQU    20
  177.  
  178. ;**************************************************************************
  179.  
  180. ; RunBack Hunk for Protracker
  181. ; Written by Lars Hamre/Amiga Freelancers 1990
  182. ; NOTE: This version will not pass arguments or WBMsg to the new Process!
  183.  
  184.     SECTION    ptrunback,CODE
  185.  
  186. rb_HunkStart
  187.     SUB.L    A1,A1
  188.     MOVE.L    4.W,A6
  189.     JSR    -294(A6)    ; FindTask
  190.     MOVE.L    D0,A4
  191.     MOVEQ    #0,D0
  192.     TST.L    $AC(A4)        ; pr_CLI
  193.     BNE.S    rb_FromCLI
  194.     LEA    $5C(A4),A0    ; pr_MsgPort
  195.     JSR    -384(A6)    ; WaitPort
  196.     LEA    $5C(A4),A0
  197.     JSR    -372(A6)    ; GetMsg
  198. rb_FromCLI
  199.     MOVE.L    D0,D7        ; D7 = WBmsg
  200.     LEA    rb_DOSname(PC),A1
  201.     MOVEQ    #0,D0
  202.     JSR    -552(A6)    ; OpenLibrary
  203.     TST.L    D0
  204.     BEQ.S    rb_dexit
  205.     MOVE.L    D0,A5
  206.     EXG    A5,A6        ; A6=DOS
  207.     MOVE.L    $98(A4),D1    ; pr_CurrentDir
  208.     JSR    -96(A6)        ; DupLock
  209.     MOVE.L    D0,rb_CurrentDir
  210.     EXG    A5,A6 ; A6=exec
  211.     JSR    -132(A6) ; Forbid
  212.     MOVE.L    #rb_ProgName,D1
  213.     MOVEQ.L    #0,D2
  214.     MOVE.B    9(A4),D2    ; priority
  215.     LEA    rb_HunkStart-4(PC),A0
  216.     MOVE.L    (A0),D3        ; Ptr to next segment
  217.     CLR.L    (A0)        ; Unlink next segment
  218.     MOVE.L    #4000,D4
  219.     EXG    A5,A6        ; A6=DOS
  220.     JSR    -138(A6)    ; CreateProc
  221.     EXG    A5,A6        ; A6=exec
  222.     JSR    -138(A6)    ; Permit
  223.     MOVE.L    A5,A1
  224.     JSR    -414(A6)    ; CloseLibrary
  225. rb_dexit
  226.     TST.L    D7
  227.     BEQ.S    rb_exit
  228.     JSR    -132(A6)    ; Forbid
  229.     MOVE.L    D7,A1
  230.     JSR    -378(A6)    ; ReplyMsg
  231. rb_exit    MOVEQ    #0,D0
  232.     RTS
  233.  
  234. rb_DOSname    dc.b    "dos.library",0
  235.  
  236. ; End of runback hunk
  237.  
  238. ;******************** CODE HUNK *********************
  239.  
  240.     SECTION ptcode,CODE
  241.  
  242. START    MOVE.L    4.W,A6
  243.     SUB.L    A1,A1
  244.     JSR    LVOFindTask(A6)
  245.     MOVE.L    D0,PTProcess
  246.     BSR.S    Main
  247.     MOVE.L    4.W,A6
  248.     JSR    LVOForbid(A6)
  249.     MOVE.L    DOSbase,A6
  250.     MOVE.L    rb_CurrentDir(PC),D1
  251.     JSR    LVOUnLock(A6)
  252.     LEA    START-4(PC),A0
  253.     MOVE.L    A0,D1
  254.     LSR.L    #2,D1
  255.     JSR    LVOUnLoadSeg(A6)
  256.     MOVEQ    #0,D0
  257.     RTS
  258.  
  259. Main    MOVE.L    SP,StackSave
  260.     BSR    OpenLotsOfThings
  261.     BSR    SetVBInt
  262.     BSR    SetMusicInt
  263.     BSR    SetInputHandler
  264.     BSR    SetAutoReq
  265.     BSR    SetPatternPos
  266.     BSR    SetNormalPtrCol
  267.     BSR    StorePtrCol
  268.     BSR    RedrawToggles
  269.     BSR    DoShowFreeMem
  270.     BSR    SetTempo
  271.     BSR    SetCopList
  272.     BSR    CheckInitError
  273.     LEA    VersionText(PC),A0
  274.     JSR    ShowStatusText
  275. MainLoop
  276.     BSR    DoKeyBuffer
  277.     BSR    CheckTransKeys
  278.     BSR    CheckCtrlKeys
  279.     BSR    CheckAltKeys
  280.     BSR    CheckKeyboard
  281.     BSR    CheckF1_F2
  282.     BSR    CheckF3_F5
  283.     BSR    CheckF6_F10
  284.     BSR    CheckPlayKeys
  285.     BSR    CheckHelpKey
  286.     BSR    ArrowKeys2
  287.     BSR    ShowTimer
  288.     BSR    ShowFreeMem
  289.     BSR    CheckBlockPos
  290.     BSR    CheckSampleLength
  291.     BSR    CheckRedraw
  292.     JSR    CheckMIDIin
  293.     BTST    #6,$BFE001
  294.     BNE.S    MainLoop    ; Loop if not pressed
  295.     TST.W    CurrScreen
  296.     BNE.S    MainSkip
  297.     MOVE.W    #1,notogfl
  298.     BSR    DisplayMainScreen
  299.     JSR    ShowAllRight
  300.     BSR    WaitForButtonUp
  301. MainSkip
  302.     BSR    ArrowKeys
  303.     BRA    CheckGadgets
  304.  
  305. notogfl        dc.w 0
  306. PTProcess    dc.l 0
  307. rb_CurrentDir    dc.l 0
  308. rb_Progname    dc.b "PT1.2A",0
  309. VersionText    dc.b 'V1.2 - RELEASE A',0
  310.  
  311. CheckInitError
  312.     MOVE.B    InitError,D0
  313.     BEQ    Return1
  314.     BTST    #0,D0
  315.     BEQ.S    cieskp1
  316.     JSR    PLSTMemErr
  317. cieskp1    MOVE.B    InitError,D0
  318.     BTST    #1,D0
  319.     BEQ.S    cieskp2
  320.     JSR    PLSTOpenErr
  321.     JSR    FreePLST
  322. cieskp2    MOVE.B    InitError,D0
  323.     BTST    #2,D0
  324.     BEQ.S    cieskp3
  325.     BSR    ConfigErr
  326. cieskp3    MOVE.B    InitError,D0
  327.     BTST    #3,D0
  328.     BEQ    Return1
  329.     BSR    ConfigErr2
  330.     BSR    SetNormalPtrCol
  331.     BRA    StorePtrCol
  332.  
  333. CheckRedraw
  334.     TST.B    UpdateTempo
  335.     BEQ.S    chkredr
  336.     CLR.B    UpdateTempo
  337.     BSR    SetTempo
  338. chkredr    CMP.L    #'patp',RunMode
  339.     BNE    Return1
  340.     JSR    ShowPosition
  341.     TST.B    PattRfsh
  342.     BEQ    Return1
  343.     MOVE.L    PattRfshNum,PatternNumber
  344.     JMP    RedrawPattern
  345.  
  346. ;---- Cleanup upon exit from PT ----
  347.  
  348. ExitCleanup
  349.     JSR    StopIt
  350.     SF    EdEnable
  351.     BSR    EscPressed
  352.     BSR    EscPressed
  353.     BSR    ResetVBInt
  354.     BSR    ResetMusicInt
  355.     BSR    ResetInputHandler
  356.     BSR    ResetAutoReq
  357.     BSR    ResetCopList
  358.     JSR    CloseMIDI
  359.     JSR    FreeCopyBuf
  360. errorexit1
  361. errorexit2
  362.     MOVE.L    StackSave,SP
  363.     MOVE.L    4.W,A6
  364.     MOVE.L    GfxBase,A1
  365.     JSR    LVOCloseLibrary(A6)
  366.     MOVE.L    IntuitionBase,A1
  367.     JSR    LVOCloseLibrary(A6)
  368.     MOVE.L    DOSbase,A1
  369.     JSR    LVOCloseLibrary(A6)
  370.  
  371.     MOVE.L    TextBplPtr,D1
  372.     BEQ.S    exex1
  373.     MOVE.L    D1,A1
  374.     MOVE.L    #27760,D0
  375.     JSR    LVOFreeMem(A6)
  376. exex1    MOVE.L    SongDataPtr,D1
  377.     BEQ.S    exex2
  378.     MOVE.L    D1,A1
  379.     MOVE.L    #70716,D0
  380.     JSR    LVOFreeMem(A6)
  381. exex2    BSR    FreeDirMem
  382.     BSR    GiveBackInstrMem
  383.     JSR    FreePLST
  384.     JSR    TurnOffVoices
  385.     BCLR    #1,$BFE001
  386.     MOVE.B    LEDStatus,D0
  387.     AND.B    #2,D0
  388.     OR.B    D0,$BFE001 ; Restore LED Status
  389.     MOVEQ    #0,D0
  390. Return1    RTS
  391.  
  392. ;---- Open Lots Of Things ----
  393.  
  394. OpenLotsOfThings
  395.     MOVE.B    $BFE001,LEDStatus
  396.     BSET    #1,$BFE001
  397.     JSR    TurnOffVoices
  398.     MOVE.L    4.W,A6
  399.     LEA    DOSname(PC),A1        ; Open DOS library
  400.     MOVEQ    #0,D0
  401.     JSR    LVOOpenLibrary(A6)
  402.     MOVE.L    D0,DOSbase
  403.     LEA    GraphicsName(PC),A1    ; Open graphics library
  404.     MOVEQ    #0,D0
  405.     JSR    LVOOpenLibrary(A6)
  406.     MOVE.L    D0,GfxBase
  407.     LEA    IntuitionName(PC),A1    ; Open Intuition library
  408.     MOVEQ    #0,D0
  409.     JSR    LVOOpenLibrary(A6)
  410.     MOVE.L    D0,IntuitionBase
  411.  
  412.     MOVE.L    DOSbase,A6
  413.     MOVE.L    rb_CurrentDir(PC),D1
  414.     JSR    LVOCurrentDir(A6)
  415.  
  416.     MOVE.L    #27760,D0        ; Alloc 27k CHIP textbpl
  417.     MOVE.L    #MEMF_CHIP!MEMF_CLEAR,D1
  418.     MOVE.L    4.W,A6
  419.     JSR    LVOAllocMem(A6)
  420.     MOVE.L    D0,TextBplPtr
  421.     BEQ    errorexit1
  422.     MOVE.W    D0,NoteBplptrLow    ; set low word
  423.     SWAP    D0
  424.     MOVE.W    D0,NoteBplptrHigh    ; set high word
  425.  
  426.     MOVE.L    #70716,D0        ; Alloc 70k patternmemory
  427.     MOVE.L    #MEMF_PUBLIC!MEMF_CLEAR,D1
  428.     JSR    LVOAllocMem(A6)
  429.     MOVE.L    D0,SongDataPtr
  430.     BEQ    errorexit2
  431.  
  432.     MOVE.L    D0,A0
  433.     LEA    $0014(A0),A0
  434.     MOVEQ    #30,D0
  435. alotloop1
  436.     MOVE.W    #1,$001C(A0)
  437.     LEA    $001E(A0),A0
  438.     DBRA    D0,alotloop1
  439.     MOVE.L    SongDataPtr,A0
  440.     MOVE.W    #$017F,sd_numofpatt(A0)
  441.     MOVE.L    #'M.K.',sd_mahokakt(A0)    ; M.K. again...
  442.  
  443.     MOVEQ    #6,D0
  444.     MOVE.L    D0,CurrSpeed
  445.     MOVE.W    #1,PEDpos
  446.     MOVE.L    #ModulesPath2,PathPtr
  447.     MOVE.L    #CopList,CopListPtr
  448.     MOVE.L    #CopListBitplanes,CopListBplPtr
  449.     MOVE.L    #CopListColors,CopListColorPtr
  450.     MOVE.L    #CopListBpl4,CopListBpl4Ptr
  451.     MOVE.L    #KbdTransTable2,KeyTransTabPtr
  452.     MOVE.L    #NoteNames1,NoteNamesPtr
  453.     MOVE.L    #VUMeterColors,TheRightColors
  454.  
  455.     MOVE.L    #BitplaneData,D0 ; Set pointers to bitplane data
  456.     LEA    CopListBitplanes,A1
  457.     MOVE.W    D0,6(A1)
  458.     SWAP    D0
  459.     MOVE.W    D0,2(A1)
  460.     SWAP    D0
  461.     ADD.L    #10240,D0
  462.     MOVE.W    D0,14(A1)
  463.     SWAP    D0
  464.     MOVE.W    D0,10(A1)
  465.     BSR    SetDefSpritePtrs
  466.     BSR    UpdateCursorPos
  467.     JSR    RedrawPattern
  468.     JSR    ShowPosition
  469.     JSR    ShowSongLength
  470.     MOVE.W    #1,InsNum
  471.     JSR    ShowSampleInfo
  472.  
  473.     LEA    TopMenusPos,A0
  474.     LEA    TopMenusBuffer,A1
  475.     MOVEQ    #43,D0
  476. stmloop    MOVEQ    #24,D1
  477. stmloop2
  478.     MOVE.B    (A0)+,(A1)+
  479.     MOVE.B    $27FF(A0),$044B(A1)
  480.     DBRA    D1,stmloop2
  481.     LEA    15(A0),A0
  482.     DBRA    D0,stmloop
  483.  
  484.     BSR    DoResetAll
  485.     BSR    cfgupda
  486.     BSR    DoLoadConfig
  487.     MOVE.L    #NoteNames1,NoteNamesPtr
  488.     TST.B    Accidental
  489.     BEQ    .skip
  490.     MOVE.L    #NoteNames2,NoteNamesPtr
  491. .skip    JSR    DoLoadPLST
  492. ChangeCopList
  493.     TST.W    SamScrEnable
  494.     BNE    Return1
  495.     BSR    SetupAnaCols
  496. SetupVUCols
  497.     TST.W    SamScrEnable
  498.     BNE    Return1
  499.     LEA    CopListMark2,A0    ; VUmeter coloring
  500.     MOVE.W    #$BA07,D5    ; Start position
  501.     LEA    VUmeterColors,A5
  502.     MOVEQ    #47,D7    ; Change 48 lines
  503. alotlp4    MOVE.W    D5,(A0)+
  504.     MOVE.W    #$FFFE,(A0)+
  505.     LEA    VUmeterColRegs(PC),A1
  506.     MOVEQ    #1,D6
  507. alotlp5    MOVE.W    (A5),D4
  508.     MOVE.W    (A1)+,(A0)+
  509.     MOVE.W    #3,FadeX
  510.     MOVE.W    D4,D0
  511.     BSR    FadeCol
  512.     MOVE.W    D0,(A0)+
  513.     MOVE.W    (A1)+,(A0)+
  514.     MOVE.W    D4,(A0)+
  515.     MOVE.W    (A1)+,(A0)+
  516.     MOVE.W    #-3,FadeX
  517.     MOVE.W    D4,D0
  518.     BSR    FadeCol
  519.     MOVE.W    D0,(A0)+
  520.     DBRA    D6,alotlp5
  521.     ADDQ.W    #2,A5
  522.     ADD.W    #$0100,D5    ; Next line...
  523.     DBRA    D7,alotlp4
  524.     RTS
  525.  
  526. VUmeterColRegs
  527.     dc.w    $01B2,$01B4,$01B6,$01BA,$01BC,$01BE
  528.  
  529. CopListBpl4Ptr    dc.l    0
  530. CopListPtr    dc.l    0
  531. CopListBplPtr    dc.l    0
  532. CopListColorPtr    dc.l    0
  533. DOSname        dc.b    'dos.library',0
  534. IntuitionName    dc.b    'intuition.library',0
  535. GraphicsName    dc.b    'graphics.library',0,0
  536.  
  537. SetupAnaCols
  538.     LEA    CopListAnalyzer,A5
  539.     MOVE.W    ColorTable+12,D2
  540.     MOVEQ    #39,D0        ; Change col 40 lines
  541.     MOVE.W    #$687D,D1    ; Start pos
  542. sacloop    MOVE.W    D1,(A5)+    ; Set wait
  543.     MOVE.W    #$FFFE,(A5)+
  544.     MOVE.W    #$018C,(A5)+    ; Set analyzer color
  545.     ADDQ.L    #2,A5
  546.     ADD.W    #$0060,D1    ; Move x-pos
  547.     MOVE.W    D1,(A5)+    ; Wait
  548.     MOVE.W    #$FFFE,(A5)+
  549.     MOVE.W    #$018C,(A5)+    ; Set text color
  550.     MOVE.W    D2,(A5)+
  551.     ADD.W    #$0100,D1    ; Next line...
  552.     SUB.W    #$0060,D1
  553.     DBRA    D0,sacloop
  554.     TST.B    DisableAnalyzer
  555.     BNE.S    ClearAnalyzerColors
  556. SetAnalyzerColors
  557.     LEA    CopListAnalyzer+6,A1
  558.     LEA    AnalyzerColors,A0
  559.     MOVEQ    #39,D0    ; 40 lines
  560. sanclop    MOVE.W    (A0)+,(A1)
  561.     LEA    16(A1),A1
  562.     DBRA    D0,sanclop
  563.     RTS
  564.  
  565. ClearAnalyzerColors
  566.     LEA    CopListAnalyzer+6,A0
  567.     MOVE.W    ColorTable+12,D1
  568.     MOVEQ    #39,D0    ; 40 lines.
  569. cacloop    MOVE.W    D1,(A0)
  570.     LEA    16(A0),A0
  571.     DBRA    D0,cacloop
  572.     RTS
  573.  
  574. SetSamSpritePtrs
  575.     MOVE.L    #LoopSpriteData1,Ch1SpritePtr
  576.     MOVE.L    #LoopSpriteData2,Ch2SpritePtr
  577.     MOVE.L    #PlayPosSpriteData,Ch3SpritePtr
  578.     MOVE.L    #NoSpriteData,Ch4SpritePtr
  579.     BRA.S    sdsp2
  580. SetDefSpritePtrs
  581.     MOVE.L    #VUSpriteData1,Ch1SpritePtr
  582.     MOVE.L    #VUSpriteData2,Ch2SpritePtr
  583.     MOVE.L    #VUSpriteData3,Ch3SpritePtr
  584.     MOVE.L    #VUSpriteData4,Ch4SpritePtr
  585. sdsp2    MOVE.L    #CursorSpriteData,CursorPosPtr
  586.     MOVE.L    #PointerSpriteData,PointerSpritePtr
  587.     MOVE.L    #LineCurSpriteData,LineCurPosPtr
  588.     MOVE.L    #NoSpriteData,NoSpritePtr
  589.     MOVE.L    PointerSpritePtr,SpritePtrsPtr
  590.  
  591.     LEA    SpritePtrsPtr,A0    ; Set pointers to spritedata
  592.     LEA    CopList,A1
  593.     MOVEQ    #15,D2
  594. alotloop2
  595.     MOVE.W    (A0)+,2(A1)
  596.     ADDQ.L    #4,A1
  597.     DBRA    D2,alotloop2
  598.     RTS
  599.  
  600. PointerSpritePtr
  601.     dc.l    0
  602.  
  603. ;---- AutoRequest() ----
  604.  
  605. SetAutoReq
  606.     MOVE.L    4.W,A6
  607.     JSR    LVOForbid(A6)
  608.     MOVE.L    IntuitionBase,A1
  609.     MOVE.L    #NewAutoRequest,D0
  610.     MOVE.L    #LVOAutoRequest,A0
  611.     JSR    LVOSetFunction(A6)
  612.     MOVE.L    D0,AutoReqSave
  613.     MOVE.L    D0,xyzza+2
  614.     JSR    LVOPermit(A6)
  615.     RTS
  616.  
  617. ResetAutoReq
  618.     MOVE.L    4.W,A6
  619.     MOVE.L    IntuitionBase,A1
  620.     MOVE.L    AutoReqSave(PC),D0
  621.     MOVE.L    #LVOAutoRequest,A0
  622.     JSR    LVOSetFunction(A6)
  623.     RTS
  624.  
  625. NewAutoRequest
  626.     TST.W    MountFlag
  627.     BNE    PositiveReturn
  628.     TST.B    AutoReqRunning
  629.     BNE.S    xyzza
  630.     BSET     #0,AutoReqRunning
  631.     MOVE.L    A0,-(SP)
  632.     MOVE.L    GfxBase,A0
  633.     MOVE.L    38(A0),$DFF080
  634.     MOVE.L    (SP)+,A0
  635. xyzzy    JSR    $0
  636.     MOVE.L    #CopList,$DFF080
  637.     BCLR    #0,AutoReqRunning
  638.     RTS
  639. xyzza    JMP    $0
  640.  
  641. AutoReqSave    EQU xyzzy+2
  642.  
  643. ;---- Special Uffda function for Intuition version 37+ -----
  644.  
  645. TestUffda
  646.     MOVE.L    IntuitionBase,A6
  647.     MOVE.L    60(A6),D0 ; FirstScreen
  648.     BEQ    Return1
  649. .wbloop    MOVE.L    D0,A0
  650.     MOVE.W    20(A0),D0 ; Flags
  651.     AND.W    #$000F,D0
  652.     CMP.W    #1,D0
  653.     BEQ.S    .wbfound
  654.     MOVE.L    (A0),D0
  655.     BEQ    Return1
  656.     BRA.S    .wbloop
  657.  
  658. .wbfound
  659.     MOVE.L    PTProcess,D1
  660.     MOVE.L    4(A0),D0  ; FirstWindow
  661.     BEQ    Return1
  662. .loop    MOVE.L    D0,A0
  663.     MOVE.L    86(A0),D0 ; UserPort
  664.     BEQ    Return1
  665.     MOVE.L    D0,A1
  666.     CMP.L    16(A1),D1 ; SigTask
  667.     BEQ.S    .foundwin
  668.     MOVE.L    (A0),D0
  669.     BEQ    .notfoundwin
  670.     BRA.S    .loop
  671.  
  672. .foundwin
  673.     BTST    #1,AutoReqRunning ; Det er noe der!
  674.     BNE    Return1
  675.     BSET    #1,AutoReqRunning
  676.     BRA    ResetCopList
  677.  
  678. .notfoundwin
  679.     BTST    #1,AutoReqRunning ; Ikke noe der!
  680.     BEQ    Return1
  681.     BCLR    #1,AutoReqRunning
  682.     BRA    SetCopList
  683.  
  684. ;---- DisplayAlert() ----
  685.  
  686. SetDispAlert
  687.     MOVE.L    IntuitionBase,A0
  688.     MOVE.L    LVODisplayAlert+2(A0),DispAlertSave
  689.     MOVE.L    #NewDispAlert,LVODisplayAlert+2(A0)
  690.     RTS
  691.  
  692. ResetDispAlert
  693.     MOVE.L    IntuitionBase,A0
  694.     MOVE.L    DispAlertSave,LVODisplayAlert+2(A0)
  695.     RTS
  696.  
  697. NewDispAlert
  698.     MOVEM.L    D0-D7/A0-A6,-(SP)
  699.     LEA    SoftFailText(PC),A1
  700.     ADDQ.L    #3,A0
  701.     MOVEQ    #16,D0
  702. ndaloop    CMP.B    (A1)+,(A0)+
  703.     BNE.S    ndaexit
  704.     DBRA    D0,ndaloop
  705.     BSR    FindAdr
  706.     TST.L    D0
  707.     BEQ.S    ndaexit
  708.     MOVE.L    D0,A1
  709.     MOVE.L    SongDataPtr,A0
  710.     MOVE.L    #70716,D0
  711. ndalop2    MOVE.B    (A0)+,D1
  712.     MOVE.W    D1,$DFF180
  713.     MOVE.B    D1,(A1)+
  714.     SUBQ.L    #1,D0
  715.     BNE.S    ndalop2
  716. ndaexit    MOVEM.L    (SP)+,D0-D7/A0-A6
  717. xyzzy2    JMP    $FC0000
  718.         
  719. DispAlertSave EQU xyzzy2+2
  720. SoftFailText    dc.b    "Software Failure.",0
  721.  
  722. ;---- Copper List ----
  723.  
  724. SetCopList
  725.     MOVE.L    #CopList,$DFF080
  726.     RTS
  727.  
  728. ResetCopList
  729.     MOVE.L    GfxBase,A0
  730.     MOVE.L    38(A0),$DFF080
  731.     RTS
  732.  
  733. ;---- Vertical Blank Interrupt ----
  734.  
  735. SetVBInt
  736.     MOVEQ    #5,D0
  737.     LEA    VBIntServer,A1
  738.     MOVE.L    4.W,A6
  739.     JSR    LVOAddIntServer(A6)
  740.     RTS
  741.  
  742. ResetVBInt
  743.     MOVEQ    #5,D0
  744.     LEA    VBIntServer,A1
  745.     MOVE.L    4.W,A6
  746.     JSR    LVORemIntServer(A6)
  747.     RTS
  748.  
  749. vbint    MOVEM.L    D0-D7/A0-A6,-(SP)
  750.     BSR    UpdatePointerPos
  751.     BSR    VUmeters
  752.     BSR    Scope
  753.     BSR    SpecAnaInt
  754.     BSR    ArrowKeys
  755.     BSR    CheckKeyRepeat
  756.     BSR    UpdateTicks
  757.     BSR    TestUffda
  758.     MOVEM.L    (SP)+,D0-D7/A0-A6
  759.     RTS
  760.  
  761. VBIntServer
  762.     dc.l 0,0
  763.     dc.b 2,0 ; type, priority
  764.     dc.l vbintname
  765.     dc.l 0,vbint
  766.  
  767. vbintname
  768.     dc.b "Protracker VBlank",0
  769.  
  770. ;---- Music Interrupt ----
  771.  
  772. SetMusicInt
  773.     TST.B    IntMode
  774.     BNE.S    SetCIAInt
  775.     MOVEQ    #5,D0
  776.     LEA    MusicIntServer,A1
  777.     MOVE.L    4.W,A6
  778.     JSR    LVOAddIntServer(A6)
  779.     RTS
  780.  
  781. ResetMusicInt
  782.     TST.B    IntMode
  783.     BNE    ResetCIAInt
  784.     MOVEQ    #5,D0
  785.     LEA    MusicIntServer,A1
  786.     MOVE.L    4.W,A6
  787.     JSR    LVORemIntServer(A6)
  788.     RTS
  789.  
  790. MusicIntServer
  791.     dc.l 0,0
  792.     dc.b 2,1 ; type, priority
  793.     dc.l musintname
  794.     dc.l 0,IntMusic
  795.  
  796. musintname    dc.b "Protracker MusicInt",0
  797.  
  798. ;---- CIA Interrupt ----
  799.  
  800. ciatalo = $400
  801. ciatahi = $500
  802. ciatblo = $600
  803. ciatbhi = $700
  804. ciacra  = $E00
  805. ciacrb  = $F00
  806.  
  807. SetCIAInt
  808.     MOVEQ    #2,D6
  809.     LEA    $BFD000,A5
  810.     MOVE.B    #'b',CIAAname+3
  811. SetCIALoop
  812.     MOVEQ    #0,D0
  813.     LEA    CIAAname(PC),A1
  814.     MOVE.L    4.W,A6
  815.     JSR    LVOOpenResource(A6)
  816.     MOVE.L    D0,CIAAbase
  817.     BEQ    Return1
  818.     MOVE.L    D0,A6
  819.  
  820.     MOVE.L    GfxBase,A0
  821.     MOVE.W    206(A0),D0    ; DisplayFlags
  822.     BTST    #2,D0        ; PAL?
  823.     BEQ.S    WasNTSC
  824.     MOVE.L    #1773447,D7 ; PAL
  825.     BRA.S    sciask
  826. WasNTSC    MOVE.L    #1789773,D7 ; NTSC
  827. sciask    MOVE.L    D7,TimerValue
  828.     DIVU    #125,D7 ; Default to normal 50 Hz timer
  829.  
  830.     CMP.W    #2,D6
  831.     BEQ.S    TryTimerA
  832. TryTimerB
  833.     LEA    MusicIntServer(PC),A1
  834.     MOVEQ    #1,D0    ; Bit 1: Timer B
  835.     JSR    AddICRVector(A6)
  836.     MOVE.L    #1,TimerFlag
  837.     TST.L    D0
  838.     BNE.S    CIAError
  839.     MOVE.L    A5,CIAAaddr
  840.     MOVE.B    D7,ciatblo(A5)
  841.     LSR.W    #8,D7
  842.     MOVE.B    D7,ciatbhi(A5)
  843.     BSET    #0,ciacrb(A5)
  844.     BRA    SetTempo
  845.  
  846. TryTimerA
  847.     LEA    MusicIntServer(PC),A1
  848.     MOVEQ    #0,D0    ; Bit 0: Timer A
  849.     JSR    AddICRVector(A6)
  850.     CLR.L    TimerFlag
  851.     TST.L    D0
  852.     BNE.S    CIAError
  853.     MOVE.L    A5,CIAAaddr
  854.     MOVE.B    D7,ciatalo(A5)
  855.     LSR.W    #8,D7
  856.     MOVE.B    D7,ciatahi(A5)
  857.     BSET    #0,ciacra(A5)
  858.     BRA    SetTempo
  859.  
  860. CIAError
  861.     MOVE.B    #'a',CIAAname+3
  862.     LEA    $BFE001,A5
  863.     SUBQ.W    #1,D6
  864.     BNE    SetCIALoop
  865.     CLR.L    CIAAbase
  866.     RTS
  867.  
  868. ResetCIAInt
  869.     MOVE.L    CIAAbase(PC),D0
  870.     BEQ    Return1
  871.     CLR.L    CIAAbase
  872.     MOVE.L    D0,A6
  873.     MOVE.L    CIAAaddr(PC),A5
  874.     TST.L    TimerFlag
  875.     BEQ.S    ResTimerA
  876.  
  877.     BCLR    #0,ciacrb(A5)
  878.     MOVEQ    #1,D0
  879.     BRA.S    RemInt
  880.  
  881. ResTimerA
  882.     BCLR    #0,ciacra(A5)
  883.     MOVEQ    #0,D0
  884. RemInt    LEA    MusicIntServer(PC),A1
  885.     MOVEQ    #0,d0
  886.     JSR    RemICRVector(A6)
  887.     RTS
  888.  
  889. CIAAname    dc.b 'ciaa.resource',0
  890. CIAAbase    dc.l 0
  891. TimerFlag    dc.l 0
  892. TimerValue    dc.l 0
  893.  
  894. ;---- Tempo ----
  895.  
  896. TempoGadg
  897.     CMP.W    #60,D0
  898.     BHS    Return1
  899.     CMP.W    #44,D0
  900.     BHS.S    TemDown
  901. TemUp    MOVE.W    RealTempo(PC),D0
  902.     ADDQ.W    #1,D0
  903.     BTST    #2,$DFF016
  904.     BNE.S    teupsk
  905.     ADDQ.W    #8,D0
  906.     ADDQ.W    #1,D0
  907. teupsk    CMP.W    #255,D0
  908.     BLS.S    teposk
  909.     MOVE.W    #255,D0
  910. teposk    MOVE.W    D0,RealTempo
  911.     BSR    SetTempo
  912.     BRA    Wait_4000
  913.  
  914. TemDown    MOVE.W    RealTempo(PC),D0
  915.     SUBQ.W    #1,D0
  916.     BTST    #2,$DFF016
  917.     BNE.S    tednsk
  918.     SUBQ.W    #8,D0
  919.     SUBQ.W    #1,D0
  920. tednsk    CMP.W    #32,D0
  921.     BHS.S    teposk
  922.     MOVE.W    #32,D0
  923.     BRA.S    teposk
  924.  
  925.  
  926. ChangeTempo
  927.     CMP.W    #94,D0
  928.     BHS.S    TempoDown
  929.     CMP.W    #80,D0
  930.     BHS.S    TempoUp
  931.     RTS
  932.  
  933. TempoUp    MOVE.W    Tempo,D0
  934.     ADDQ.W    #1,D0
  935.     BTST    #2,$DFF016
  936.     BNE.S    temupsk
  937.     ADDQ.W    #8,D0
  938.     ADDQ.W    #1,D0
  939. temupsk    CMP.W    #255,D0
  940.     BLS.S    temposk
  941.     MOVE.W    #255,D0
  942. temposk    MOVE.W    D0,Tempo
  943.     MOVE.W    D0,RealTempo
  944.     BSR.S    ShowTempo
  945.     BSR.S    SetTempo
  946.     BRA    Wait_4000
  947.  
  948. TempoDown
  949.     MOVE.W    Tempo,D0
  950.     SUBQ.W    #1,D0
  951.     BTST    #2,$DFF016
  952.     BNE.S    temdnsk
  953.     SUBQ.W    #8,D0
  954.     SUBQ.W    #1,D0
  955. temdnsk    CMP.W    #32,D0
  956.     BHS.S    temposk
  957.     MOVE.W    #32,D0
  958.     BRA.S    temposk
  959.  
  960. ShowTempo
  961.     MOVE.W    #607,TextOffset
  962.     MOVE.W    RealTempo(PC),WordNumber
  963.     JMP    Print3DecDigits
  964.  
  965. SetTempo
  966.     MOVEQ    #125,D0
  967.     MOVE.L    CIAAbase(PC),D1
  968.     BEQ.S    setesk3
  969.     MOVE.W    RealTempo(PC),D0
  970.     CMP.W    #32,D0
  971.     BHS.S    setemsk
  972.     MOVEQ    #32,D0
  973. setemsk    MOVE.W    D0,RealTempo
  974. setesk3    TST.W    SamScrEnable
  975.     BNE.S    setesk2
  976.     MOVE.W    #4964,TextOffset
  977.     MOVE.W    D0,WordNumber
  978.     JSR    Print3DecDigits
  979. setesk2    MOVE.L    CIAAbase(PC),D0
  980.     BEQ    Return1
  981.     MOVE.W    RealTempo(PC),D0
  982.     MOVE.L    TimerValue(PC),D1
  983.     DIVU    D0,D1
  984.     MOVE.L    CIAAaddr(PC),A5
  985.     MOVE.L    TimerFlag(PC),D0
  986.     BEQ.S    SetTemA
  987.     MOVE.B    D1,ciatblo(A5)    ;and set the CIA timer
  988.     LSR.W    #8,D1
  989.     MOVE.B    D1,ciatbhi(A5)
  990.     RTS
  991.  
  992. SetTemA    MOVE.B    D1,ciatalo(A5)
  993.     LSR.W    #8,D1
  994.     MOVE.B    D1,ciatahi(A5)
  995.     RTS
  996.  
  997. RealTempo    dc.w 125
  998. CIAAaddr    dc.l 0
  999.  
  1000. ;---- Input Event Handler ----
  1001.  
  1002. SetInputHandler
  1003.     MOVE.L    4.W,A6
  1004.     LEA    InpEvPort,A1
  1005.     JSR    LVOAddPort(A6)
  1006.     LEA    InputDevName,A0
  1007.     MOVEQ    #0,D0
  1008.     LEA    InpEvIOReq,A1
  1009.     MOVEQ    #0,D1
  1010.     MOVE.L    #InpEvPort,14(A1)
  1011.     JSR    LVOOpenDevice(A6)
  1012.     LEA    InpEvIOReq,A1
  1013.     MOVE.W    #9,IO_COMMAND(A1) ; IND_ADDHANDLER
  1014.     MOVE.B    #1,IO_FLAGS(A1)
  1015.     MOVE.L    #InpEvStuff,IO_DATA(A1)
  1016.     JSR    LVOSendIO(A6)
  1017.     RTS
  1018.  
  1019. ResetInputHandler
  1020.     MOVE.L    4.W,A6
  1021.     LEA    InpEvIOReq,A1
  1022.     MOVE.W    #10,IO_COMMAND(A1) ; IND_REMHANDLER
  1023.     MOVE.B    #1,IO_FLAGS(A1)
  1024.     MOVE.L    #InpEvStuff,IO_DATA(A1)
  1025.     JSR    LVOSendIO(A6)
  1026.     LEA    InpEvIOReq,A1
  1027.     JSR    LVOCloseDevice(A6)
  1028.     LEA    InpEvPort,A1
  1029.     JSR    LVORemPort(A6)
  1030.     RTS
  1031.  
  1032.  
  1033. InpEvStuff
  1034.     dc.l    0,0
  1035.     dc.b    2,52 ; type, priority
  1036.     dc.l    inpevname
  1037.     dc.l    0,InputHandler
  1038.  
  1039. inpevname
  1040.     dc.b "Protracker InputHandler",0
  1041.  
  1042. InputHandler ; A0-InputEvent, A1-Data Area
  1043.     MOVEM.L    D1/A0-A3,-(SP)
  1044.     TST.B    AutoReqRunning
  1045.     BNE.S    inphend
  1046.     SUB.L    A2,A2
  1047.     MOVE.L    A0,A1
  1048.     MOVE.B    4(A1),D0 ; ie_Class
  1049.     CMP.B    #1,D0    ; RAWKEY
  1050.     BEQ.S    InpRawkey
  1051.     CMP.B    #2,D0    ; RAWMOUSE
  1052.     BEQ.S    InpRawmouse
  1053.     MOVE.L    A1,A2
  1054. InpNext    MOVE.L    (A1),A1
  1055.     MOVE.L    A1,D0
  1056.     BNE.S    InputHandler
  1057. inphend    MOVE.L    A0,D0
  1058.     MOVEM.L    (SP)+,D1/A0-A3
  1059.     RTS
  1060.  
  1061. InpRawkey
  1062.     BSR    InpUnchain
  1063.     MOVE.W    6(A1),D0
  1064.     BSR    ProcessRawkey
  1065.     BRA    InpNext
  1066.  
  1067. InpRawmouse
  1068.     BSR    InpUnchain
  1069.     MOVE.W    MouseX3,D0
  1070.     MOVE.W    MouseY3,D1
  1071.     ADD.W    10(A1),D0
  1072.     ADD.W    12(A1),D1
  1073.     TST.W    D0
  1074.     BPL.S    irskip1
  1075.     MOVEQ    #0,D0
  1076. irskip1    TST.W    D1
  1077.     BPL.S    irskip2
  1078.     MOVEQ    #0,D1
  1079. irskip2    CMP.W    #640,D0
  1080.     BLO.S    irskip3
  1081.     MOVE.W    #639,D0
  1082. irskip3    CMP.W    #512,D1
  1083.     BLO.S    irskip4
  1084.     MOVE.W    #511,D1
  1085. irskip4    MOVE.W    D0,MouseX3
  1086.     MOVE.W    D1,MouseY3
  1087.     LSR.W    #1,D0
  1088.     LSR.W    #1,D1
  1089.     MOVE.W    D0,MouseX
  1090.     MOVE.W    D1,MouseY
  1091.     BRA.S    InpNext
  1092.  
  1093. InpUnchain
  1094.     MOVE.L    A2,D0
  1095.     BNE.S    InpUnc2
  1096.     MOVE.L    (A1),A0
  1097.     RTS
  1098. InpUnc2    MOVE.L    (A1),(A2)
  1099.     RTS
  1100.  
  1101. ;---- Process rawkey code from the keyboard ----
  1102.  
  1103. ProcessRawkey
  1104.     CMP.B    LastRawkey,D0
  1105.     BEQ    Return1
  1106.     MOVE.B    D0,LastRawkey
  1107.     CMP.B    #67+128,D0
  1108.     BEQ    LowerInstr2
  1109.     CMP.B    #96,D0
  1110.     BEQ    ShiftOn
  1111.     CMP.B    #97,D0
  1112.     BEQ    ShiftOn2
  1113.     CMP.B    #100,D0
  1114.     BEQ    AltOn
  1115.     CMP.B    #101,D0
  1116.     BEQ    AltOn2
  1117.     CMP.B    #99,D0
  1118.     BEQ    CtrlOn
  1119.     CMP.B    #102,D0
  1120.     BEQ    LeftAmigaOn
  1121.     CMP.B    #99+128,D0
  1122.     BEQ    CtrlOff
  1123.     CMP.B    #100+128,D0
  1124.     BEQ    AltOff
  1125.     CMP.B    #96+128,D0
  1126.     BEQ.S    ShiftOff
  1127.     CMP.B    #101+128,D0
  1128.     BEQ    AltOff
  1129.     CMP.B    #97+128,D0
  1130.     BEQ.S    ShiftOff
  1131.     CMP.B    #102+128,D0
  1132.     BEQ    LeftAmigaOff
  1133.     CMP.B    #98,D0
  1134.     BEQ.S    KeyRepOn
  1135.     CMP.B    #98+128,D0
  1136.     BEQ.S    KeyRepOff
  1137. kbintSetKey
  1138.     TST.B    D0
  1139.     BNE.S    kbintDoSet
  1140.     MOVE.B    #127,D0
  1141. kbintDoSet
  1142.     MOVE.W    KeyBufPos(PC),D1
  1143.     CMP.W    #KeyBufSize,D1
  1144.     BHS    Return1
  1145.     LEA    KeyBuffer(PC),A3
  1146.     MOVE.B    D0,(A3,D1.W)
  1147.     ADDQ.W    #1,KeyBufPos
  1148.     RTS
  1149.  
  1150. LowerInstr2
  1151.     CLR.W    HiLowInstr
  1152.     BRA.S    kbintsetkey
  1153.  
  1154. KeyRepOn
  1155.     ST    KeyRepeat
  1156.     RTS
  1157.  
  1158. KeyRepOff
  1159.     SF    KeyRepeat
  1160.     RTS
  1161.  
  1162. ShiftOn    MOVE.W    #1,ShiftKeyStatus
  1163.     RTS
  1164.  
  1165. ShiftOn2
  1166.     MOVE.W    #1,ShiftKeyStatus
  1167.     BRA.S    kbintsetkey
  1168.  
  1169. ShiftOff
  1170.     CLR.W    ShiftKeyStatus
  1171.     RTS
  1172.  
  1173. AltOn    MOVE.W    #1,AltKeyStatus
  1174.     RTS
  1175.  
  1176. AltOn2    MOVE.W    #1,AltKeyStatus
  1177.     BRA.S    kbintsetkey
  1178.  
  1179. AltOff    CLR.W    AltKeyStatus
  1180.     RTS
  1181.  
  1182. CtrlOn    MOVE.W    #1,CtrlKeyStatus
  1183.     RTS
  1184.  
  1185. CtrlOff    CLR.W    CtrlKeyStatus
  1186.     RTS
  1187.  
  1188. LeftAmigaOn
  1189.     MOVE.W    #1,LeftAmigaStatus
  1190.     RTS
  1191.  
  1192. LeftAmigaOff
  1193.     CLR.W    LeftAmigaStatus
  1194.     RTS
  1195.  
  1196. DoKeyBuffer
  1197.     MOVE.W    KeyBufPos(PC),D0
  1198.     BEQ    Return1
  1199.     SUBQ.W    #1,D0
  1200.     LEA    KeyBuffer(PC),A0
  1201.     MOVE.B    (A0,D0.W),D1
  1202.     MOVE.W    D0,KeyBufPos
  1203.     MOVE.B    D1,RawKeyCode
  1204.     MOVE.B    D1,SaveKey
  1205.     MOVE.W    KeyRepDelay,KeyRepCounter
  1206.     BTST    #7,D1
  1207.     BEQ.S    dkbend
  1208.     CLR.W    KeyRepCounter
  1209. dkbend    RTS
  1210.  
  1211. KeyBufPos    dc.w    0
  1212. KeyBuffer    dcb.b    KeyBufSize,0
  1213. ShiftKeyStatus    dc.w    0
  1214. AltKeyStatus    dc.w    0
  1215. CtrlKeyStatus    dc.w    0
  1216. LeftAmigaStatus    dc.w    0
  1217. LastRawkey    dc.b    255,0
  1218. SaveKey        dc.b 0
  1219. KeyRepeat    dc.b 0
  1220. KeyRepCounter    dc.w 0
  1221.  
  1222. ;---- Key repeat ----
  1223.  
  1224. CheckKeyRepeat
  1225.     TST.B    KeyRepeat
  1226.     BEQ    Return1
  1227.     MOVE.W    KeyRepCounter(PC),D0
  1228.     BEQ    Return1
  1229.     SUBQ.W    #1,D0
  1230.     BEQ.S    RepDown
  1231.     MOVE.W    D0,KeyRepCounter
  1232.     RTS
  1233.  
  1234. RepDown    MOVE.B    SaveKey(PC),RawKeyCode
  1235.     MOVE.W    KeyRepSpeed,KeyRepCounter
  1236.     RTS
  1237.  
  1238. ;---- Update Mousepointer Position ----
  1239.  
  1240. UpdatePointerPos
  1241.     MOVE.W    MouseX,D0
  1242.     ADDQ.W    #3,D0
  1243.     MOVE.W    MouseY,D1
  1244.     MOVEQ    #16,D2
  1245.     MOVE.L    PointerSpritePtr,A0
  1246.     JMP    SetSpritePos
  1247.  
  1248. ;---- Timer ----
  1249.  
  1250. UpdateTicks
  1251.     CMP.L    #'patp',RunMode
  1252.     BNE    Return1
  1253.     ADDQ.W    #1,PatternTicks
  1254.     MOVE.W    PatternTicks(PC),D0
  1255.     MOVE.L    4.W,A0
  1256.     CMP.B    $0212(A0),D0
  1257.     BNE    Return1
  1258.     CLR.W    PatternTicks
  1259.     ADDQ.L    #1,TimerTicks
  1260.     RTS    
  1261.  
  1262. ShowTimer
  1263.     CMP.W    #4,CurrScreen
  1264.     BEQ    Return1
  1265.     MOVE.L    TimerTicks(PC),D0
  1266.     DIVU    #60,D0
  1267.     MOVE.W    D0,WordNumber
  1268.     SWAP    D0
  1269.     MOVE.W    D0,D7
  1270.     MOVE.W    #4154,TextOffset
  1271.     JSR    Print2DecDigits
  1272.     MOVE.W    D7,WordNumber
  1273.     ADDQ.W    #1,TextOffset
  1274.     JMP    Print2DecDigits
  1275.  
  1276. PatternTicks    dc.w    0
  1277. TimerTicks    dc.l    0
  1278.  
  1279. ;---- Spectrum Analyzer ----
  1280.  
  1281. SpecAnaInt
  1282.     CMP.W    #1,CurrScreen
  1283.     BNE    Return1
  1284.     TST.B    DisableAnalyzer
  1285.     BNE    Return1
  1286. .loop    TST.B    AnaDrawFlag
  1287.     BNE    Return1
  1288.     ST    AnaDrawFlag
  1289.     MOVEQ    #40,D5
  1290.     MOVEQ    #126,D6
  1291.     LEA    AnalyzerHeights,A0
  1292.     LEA    AnalyzerOpplegg,A1
  1293.     LEA    AnalyzerOffsets(PC),A2
  1294.     MOVE.L    TextBplPtr,A3
  1295.     LEA    1976(A3),A3
  1296.     MOVEQ    #$16,D7
  1297. spanlab1
  1298.     MOVE.W    (A0)+,D0
  1299.     CMP.W    #36,D0
  1300.     BLO.S    spanskip2
  1301.     MOVE.W    #36,D0
  1302. spanskip2
  1303.     MOVE.W    (A1)+,D1
  1304.     CMP.W    D0,D1
  1305.     BEQ.S    spanskip3
  1306.     BLO.S    span_r2
  1307.     SUB.W    D0,D1
  1308.     SUBQ.W    #1,D1
  1309.     ADD.W    D0,D0
  1310.     MOVE.W    0(A2,D0.W),D0
  1311. spanloop
  1312.     CLR.B    0(A3,D0.W)
  1313.     SUB.W    D5,D0
  1314.     DBRA    D1,spanloop
  1315.     BRA.S    spanskip3
  1316.  
  1317. span_r2    SUB.W    D1,D0
  1318.     SUBQ.W    #1,D0
  1319.     LSL.W    #1,D1
  1320.     MOVE.W    0(A2,D1.W),D1
  1321. spanloop2    MOVE.B    D6,0(A3,D1.W)
  1322.     SUB.W    D5,D1
  1323.     DBRA    D0,spanloop2
  1324. spanskip3
  1325.     ADDQ.L    #1,A3
  1326.     DBRA    D7,spanlab1
  1327.     LEA    AnalyzerHeights,A0
  1328.     LEA    AnalyzerOpplegg,A1
  1329.     MOVEQ    #22,D7
  1330. spanloop3    MOVE.W    (A0),D0
  1331.     MOVE.W    D0,(A1)+
  1332.     BEQ.S    spanskip4
  1333.     SUBQ.W    #1,D0
  1334. spanskip4
  1335.     MOVE.W    D0,(A0)+
  1336.     DBRA    D7,spanloop3
  1337.     SF    AnaDrawFlag
  1338.     RTS
  1339.  
  1340. ClearAnaHeights
  1341.     LEA    AnalyzerOpplegg,A0
  1342.     LEA    AnalyzerHeights,A1
  1343.     MOVEQ    #22,D7
  1344.     MOVEQ    #0,D0
  1345. cahloop    MOVE.W    D0,(A0)+
  1346.     MOVE.W    D0,(A1)+
  1347.     DBRA    D7,cahloop
  1348.     RTS
  1349.  
  1350. PlayNoteAnalyze        ; Called by keyboard play
  1351.     MOVEM.L    D0-D3/A0,-(SP)
  1352.     MOVEQ    #0,D2
  1353.     MOVE.W    2(A6),D2
  1354.     BRA.S    SpecAna2
  1355.  
  1356. SpectrumAnalyzer    ; Called by playroutine
  1357.     TST.W    (A4)
  1358.     BEQ    Return1
  1359.     MOVEM.L    D0-D3/A0,-(SP)
  1360.     MOVEQ    #0,D2
  1361.     MOVE.B    n_volume(A6),D2    ; Get channel volume
  1362. SpecAna2
  1363.     TST.B    AnaDrawFlag
  1364.     BNE    ohno
  1365.     ST    AnaDrawFlag
  1366.     BSR    SetAnalyzerVolumes
  1367.     BEQ.S    saend
  1368.     LSL.W    #8,D2
  1369.     DIVU    #682,D2
  1370.     MOVE.W    D2,D3
  1371.     LSR.W    #1,D3
  1372.     LEA    AnalyzerHeights,A0
  1373.     SUB.W    #113,D0    ; Subtract 113 (highest rate)
  1374.     MOVE.W    #743,D1
  1375.     SUB.W    D0,D1    ; Invert range 0-743
  1376.     MULU    D1,D1    ; 0 - 743^2
  1377.     DIVU    #25093,D1
  1378.     MOVE.W    D1,D0
  1379.     CMP.W    #46,D0
  1380.     BLO.S    saskip
  1381.     MOVEQ    #45,D0
  1382. saskip    LSL.W    #1,D0
  1383.     ADD.W    D2,(A0,D0.W)
  1384.     CMP.W    #36,(A0,D0.W)
  1385.     BLO.S    saskip2
  1386.     MOVE.W    #36,(A0,D0.W)
  1387. saskip2    TST.W    D0
  1388.     BEQ.S    saskip3
  1389.     ADD.W    D3,-2(A0,D0.W)
  1390.     CMP.W    #36,-2(A0,D0.W)
  1391.     BLO.S    saskip3
  1392.     MOVE.W    #36,-2(A0,D0.W)
  1393. saskip3    CMP.W    #44,D0
  1394.     BEQ.S    saend
  1395.     ADD.W    D3,2(A0,D0.W)
  1396.     CMP.W    #36,2(A0,D0.W)
  1397.     BLO.S    saend
  1398.     MOVE.W    #36,2(A0,D0.W)
  1399. saend    SF    AnaDrawFlag
  1400. ohno    MOVEM.L    (SP)+,D0-D3/A0
  1401.     RTS
  1402.  
  1403. AnalyzerOffsets
  1404.     dc.w $0730,$0708,$06E0,$06B8,$0690,$0668,$0640,$0618
  1405.     dc.w $05F0,$05C8,$05A0,$0578,$0550,$0528,$0500,$04D8
  1406.     dc.w $04B0,$0488,$0460,$0438,$0410,$03E8,$03C0,$0398
  1407.     dc.w $0370,$0348,$0320,$02F8,$02D0,$02A8,$0280,$0258
  1408.     dc.w $0230,$0208,$01E0,$01B8,$0190,$0168,$0140,$0118
  1409.     dc.w $00F0
  1410.  
  1411. AnaDrawFlag    dc.b 0,0
  1412.  
  1413. ;---- Scope ----
  1414.  
  1415. ns_sampleptr =  0
  1416. ns_endptr    =  4
  1417. ns_repeatptr =  8
  1418. ns_rependptr = 12
  1419. ns_period    = 16
  1420. ns_volume    = 18
  1421.  
  1422. Scope    LEA    audchan1temp,A0
  1423.     LEA    ScopeInfo,A2
  1424.     LEA    ScopeSamInfo,A1
  1425.     LEA    BlankSample,A3
  1426.     MOVEQ.L    #3,D6
  1427. ScoLoop    MOVE.W    (A0),D0
  1428.     AND.W    #$0FFF,D0
  1429.     OR.W    n_period(A0),D0
  1430.     BEQ    ScoSampleEnd ; end if no note & no period
  1431.  
  1432.     MOVE.W    n_period(A0),ns_period(A2)
  1433.     MOVE.B    n_volume(A0),ns_volume(A2)
  1434.  
  1435.  
  1436.     TST.B    n_trigger(A0)
  1437.     BEQ    ScoContinue
  1438. ScoRetrig
  1439.     SF    n_trigger(A0)
  1440.     BSR    SetScope
  1441.     MOVEQ    #0,D0
  1442.     MOVE.B    n_samplenum(A0),D0
  1443.     SUBQ.W    #1,D0
  1444.     LSL.W    #4,D0
  1445.     MOVE.L    ns_sampleptr(A1,D0.W),ns_sampleptr(A2)
  1446.     MOVE.L    ns_endptr(A1,D0.W),ns_endptr(A2)
  1447.     MOVE.L    ns_repeatptr(A1,D0.W),ns_repeatptr(A2)
  1448.     MOVE.L    ns_rependptr(A1,D0.W),ns_rependptr(A2)
  1449.     MOVE.L    ns_sampleptr(A2),D0
  1450.     CMP.L    A3,D0 ; at end of sample...
  1451.     BEQ.S    ScoNextChan
  1452.     BRA    ScoChk
  1453. ScoContinue
  1454.     MOVE.L    ns_sampleptr(A2),D0
  1455.     CMP.L    A3,D0 ; at end of sample...
  1456.     BEQ.S    ScoNextChan
  1457.     MOVEQ.L    #0,D1
  1458.     MOVE.W    ns_period(A2),D1
  1459.     LSR.W    #1,D1
  1460.     BEQ.S    ScoNextChan
  1461.     MOVE.L    #35469,D2
  1462.     DIVU    D1,D2
  1463.     EXT.L    D2
  1464.     ADD.L    D2,D0
  1465. ScoChk    CMP.L    ns_endptr(A2),D0
  1466.     BLO.S    ScoUpdatePtr
  1467.     TST.L    ns_repeatptr(A2)
  1468.     BNE.S    ScoSamLoop
  1469. ScoSampleEnd
  1470.     MOVE.L    A3,D0
  1471.     BRA.S    ScoUpdatePtr
  1472.  
  1473. ScoSamLoop
  1474.     SUB.L    ns_endptr(A2),D0
  1475.     ADD.L    ns_repeatptr(A2),D0
  1476.     MOVE.L    ns_rependptr(A2),ns_endptr(A2)
  1477.     CMP.L    ns_endptr(A2),D0
  1478.     BHS    ScoSamLoop
  1479. ScoUpdatePtr
  1480.     MOVE.L    D0,ns_sampleptr(A2)
  1481. ScoNextChan
  1482.     ADD.L    #20,A2
  1483.     ADD.L    #44,A0
  1484.     DBRA    D6,ScoLoop
  1485.  
  1486. ; now draw channels
  1487.     TST.B    ScopeEnable
  1488.     BEQ.S    clsnot
  1489.     CMP.W    #1,CurrScreen
  1490.     BNE.S    clsnot
  1491.     TST.B    EdEnable
  1492.     BNE.S    clsnot
  1493.  
  1494.     MOVE.L    TextBplPtr,A0
  1495.     ADD.L    #2256,A0
  1496.     MOVEQ    #0,D0
  1497.     MOVEQ    #32,D1
  1498. clscop1    MOVEQ    #5,D2
  1499. clscop2    MOVE.L    D0,(A0)+
  1500.     DBRA    D2,clscop2
  1501.     LEA    16(A0),A0
  1502.     DBRA    D1,clscop1
  1503.  
  1504. clsnot    MOVEQ    #-1,D4
  1505.     TST.W    SamScrEnable
  1506.     BEQ.S    ScoNClr
  1507.     MOVEQ    #0,D4
  1508. ScoNClr    MOVEQ    #0,D7
  1509.     MOVE.W    $DFF002,D6 ; dmaconr
  1510.     MOVEQ    #0,D5
  1511.     MOVE.L    #72*40+16,A1
  1512.     LEA    xBlankSample,A2
  1513.     BTST    #0,D6
  1514.     BEQ.S    ScoSkp1
  1515.     LEA    ScopeInfo,A2
  1516.     MOVE.B    ns_volume(A2),D5
  1517. ScoSkp1    BSR.S    ScoDraw
  1518.  
  1519.     MOVEQ    #0,D5
  1520.     MOVE.L    #72*40+22,A1
  1521.     LEA    xBlankSample,A2
  1522.     BTST    #1,D6
  1523.     BEQ.S    ScoSkp2
  1524.     LEA    ScopeInfo+20,A2
  1525.     MOVE.B    ns_volume(A2),D5
  1526. ScoSkp2    BSR.S    ScoDraw
  1527.  
  1528.     MOVEQ    #0,D5
  1529.     MOVE.L    #72*40+28,A1
  1530.     LEA    xBlankSample,A2
  1531.     BTST    #2,D6
  1532.     BEQ.S    ScoSkp3
  1533.     LEA    ScopeInfo+40,A2
  1534.     MOVE.B    ns_volume(A2),D5
  1535. ScoSkp3    BSR.S    ScoDraw
  1536.  
  1537.     MOVEQ    #0,D5
  1538.     MOVE.L    #72*40+34,A1
  1539.     LEA    xBlankSample,A2
  1540.     BTST    #3,D6
  1541.     BEQ.S    ScoSkp4
  1542.     LEA    ScopeInfo+60,A2
  1543.     MOVE.B    ns_volume(A2),D5
  1544. ScoSkp4    BSR    ScoDraw
  1545.     TST.L    D7
  1546.     BEQ    sdloscr
  1547. ScoRTS    RTS
  1548.  
  1549. ScoDraw    TST.B    ScopeEnable
  1550.     BEQ.S    sdlpos
  1551.     CMP.W    #1,CurrScreen
  1552.     BNE.S    sdlpos
  1553.     TST.B    EdEnable
  1554.     BNE.S    sdlpos
  1555.     LSR.W    #1,D5
  1556.     CMP.W    #32,D5
  1557.     BLS.S    sdsk1
  1558.     MOVEQ    #32,D5
  1559. sdsk1    MOVE.L    (A2),A0
  1560.     ADD.L    TextBplPtr,A1
  1561.     MOVEQ    #4,D2
  1562. sdlp1    MOVEQ    #7,D3
  1563. sdlp2    MOVE.B    (A0)+,D0    ; get byte
  1564.     EXT.W    D0        ; extend to word
  1565.     NEG.W    D0        ; negate
  1566.     MULS    D5,D0        ; multiply by volume
  1567.     ASR.W    #8,D0        ; shift down
  1568.     MOVE.W    D0,D1
  1569.     ASL.W    #5,D0        ; * 32
  1570.     ASL.W    #3,D1        ; * 8
  1571.     ADD.W    D1,D0        ; (32+8) = * 40
  1572.     BSET    D3,(A1,D0.W)    ; set a bit
  1573.     DBRA    D3,sdlp2
  1574.     ADDQ.L    #1,A1        ; yes
  1575. sdlskip    DBRA    D2,sdlp1
  1576.  
  1577. sdlpos    TST.B    D4
  1578.     BNE.S    ScoRTS
  1579.     LEA    xBlankSample(PC),A0
  1580.     CMP.L    A0,A2
  1581.     BEQ.S    sdloscr
  1582.     MOVE.L    (A2),D1
  1583.     MOVE.L    SamDrawStart(PC),D0
  1584.     CMP.L    D0,D1
  1585.     BLS.S    ScoRTS
  1586.     CMP.L    SamDrawEnd(PC),D1
  1587.     BHS.S    ScoRTS
  1588.     SUB.L    D0,D1
  1589.     MULU    #314,D1
  1590.     MOVE.L    SamDisplay,D0
  1591.     BEQ.S    ScoRTS
  1592.     DIVU    D0,D1
  1593.     ST    D4
  1594.     ST    D7
  1595.     MOVE.L    D1,D0
  1596.     ADDQ.W    #6,D0
  1597.     MOVE.W    #139,D1
  1598. sdlpspr    MOVEQ    #64,D2
  1599.     LEA    PlayPosSpriteData,A0
  1600.     JMP    SetSpritePos
  1601.  
  1602. sdloscr    MOVEQ    #0,D0
  1603.     MOVE.W    #270,D1
  1604.     BRA.S    sdlpspr
  1605.  
  1606. SetScope
  1607.     MOVEQ    #0,D1
  1608.     MOVE.B    n_samplenum(A0),D1
  1609.     SUBQ.W    #1,D1
  1610.     LSL.W    #4,D1
  1611.     LEA    ScopeSamInfo,A4
  1612.     LEA    (A4,D1.W),A4
  1613.  
  1614.     MOVE.L    n_start(A0),D0
  1615.     MOVE.L    D0,ns_sampleptr(A4)
  1616.     MOVEQ    #0,D1
  1617.     MOVE.W    n_length(A0),D1
  1618.     ADD.L    D1,D0
  1619.     ADD.L    D1,D0
  1620.     MOVE.L    D0,ns_endptr(A4)
  1621.  
  1622.     MOVE.L    n_loopstart(A0),D0
  1623.     MOVE.L    D0,ns_repeatptr(A4)
  1624.     MOVEQ    #0,D1
  1625.     MOVE.W    n_replen(A0),D1
  1626.     CMP.W    #1,D1
  1627.     BEQ.S    sconorep
  1628.     ADD.L    D1,D0
  1629.     ADD.L    D1,D0
  1630.     MOVE.L    D0,ns_rependptr(A4)
  1631.     BRA    Return1
  1632. sconorep
  1633.     CLR.L    ns_repeatptr(A4)
  1634.     RTS
  1635.  
  1636. ToggleAnaScope
  1637.     TST.W    notogfl
  1638.     BNE    return1
  1639.     BSR    WaitForButtonUp
  1640.     MOVEQ    #0,D4
  1641.     TST.B    AnaScopFlag
  1642.     BNE.S    tasana
  1643.     ST    AnaScopFlag
  1644.     BRA    RedrawAnaScope
  1645. tasana    SF    AnaScopFlag
  1646.     BRA    RedrawAnaScope
  1647.  
  1648. ScopeEnable    dc.b 0
  1649. AnaScopFlag    dc.b 1
  1650. xBlankSample    dc.l BlankSample
  1651. SamDrawStart    dc.l 0
  1652. SamDrawEnd    dc.l 0
  1653.  
  1654. ;---- Show Free/Tune Memory ----
  1655.  
  1656. DoShowFreeMem
  1657.     MOVE.W    #1,UpdateFreeMem
  1658. ShowFreeMem
  1659.     MOVEM.L    D0-D7/A0-A6,-(SP)
  1660.     TST.W    UpdateFreeMem
  1661.     BEQ.S    sfmskp
  1662.     CLR.W    UpdateFreeMem
  1663.     CLR.L    FreeMemory
  1664.     CLR.L    TuneMemory
  1665. sfmskp    BSR    ShowTuneMem
  1666.     MOVEQ    #MEMF_CHIP,D1
  1667.     TST.B    ShowPublicFlag
  1668.     BEQ    sfmskp2
  1669.     MOVEQ    #MEMF_PUBLIC,D1
  1670. sfmskp2    MOVE.L    4.W,A6
  1671.     JSR    LVOAvailMem(A6)
  1672.     CMP.L    FreeMemory(PC),D0
  1673.     BEQ.S    fremend
  1674.     MOVE.L    D0,FreeMemory
  1675.     TST.B    ShowDecFlag
  1676.     BNE.S    shfrdec
  1677.     MOVE.L    D0,D6
  1678.     MOVE.W    #5273,TextOffset
  1679.     SWAP    D0
  1680.     AND.W    #$FF,D0
  1681.     MOVE.W    D0,WordNumber
  1682.     JSR    PrintHexByte
  1683.     MOVE.W    D6,WordNumber
  1684.     JSR    PrintHexWord
  1685. fremend    MOVEM.L    (SP)+,D0-D7/A0-A6
  1686.     RTS
  1687.  
  1688. shfrdec    MOVE.L    FreeMemory(PC),D0
  1689.     MOVE.W    #5273,TextOffset
  1690.     JSR    Print6DecDigits
  1691.     BRA.S    fremend
  1692.  
  1693. ShowTuneMem
  1694.     MOVE.L    SongDataPtr,A0
  1695.     LEA    42(A0),A0
  1696.     MOVE.W    TuneUp(PC),D7
  1697.     SUBQ.W    #1,D7
  1698.     MOVE.W    #31,TuneUp
  1699.     MOVEQ    #0,D0    ; Zero length
  1700. stumeloop
  1701.     MOVEQ    #0,D1
  1702.     MOVE.W    (A0),D1
  1703.     ASL.W    #1,D1
  1704.     ADD.L    D1,D0    ; Add samplelength
  1705.     ADD.L    #30,A0
  1706.     DBRA    D7,stumeloop
  1707.     ADD.L    #1084,D0    ; Add 1084 to length
  1708.     MOVE.L    SongDataPtr,A0
  1709.     MOVEQ    #127,D7
  1710.     ADD.L    #952,A0
  1711.     MOVEQ    #0,D6
  1712. stumeloop2
  1713.     MOVE.B    (A0)+,D5
  1714.     CMP.B    D5,D6
  1715.     BHI.S    stumeskip
  1716.     MOVE.B    D5,D6
  1717. stumeskip
  1718.     DBRA    D7,stumeloop2
  1719.     ADDQ.W    #1,D6
  1720.     ASL.L    #8,D6
  1721.     ASL.L    #2,D6
  1722.     ADD.L    D6,D0    ; Add 1024 x Number of patterns
  1723.     CMP.L    TuneMemory(PC),D0
  1724.     BEQ    Return1
  1725.     MOVE.L    D0,TuneMemory
  1726.     TST.B    ShowDecFlag
  1727.     BNE.S    shtudec
  1728.     MOVE.L    D0,D6
  1729.     MOVE.W    #4993,TextOffset
  1730.     SWAP    D0
  1731.     AND.W    #$FF,D0
  1732.     MOVE.W    D0,WordNumber
  1733.     JSR    PrintHexByte
  1734.     MOVE.W    D6,WordNumber
  1735.     JMP    PrintHexWord
  1736.  
  1737. shtudec    MOVE.L    TuneMemory(PC),D0
  1738.     MOVE.W    #4993,TextOffset
  1739.     JMP    Print6DecDigits
  1740.  
  1741. UpdateFreeMem    dc.w    0
  1742. FreeMemory    dc.l    0
  1743. TuneMemory    dc.l    0
  1744. TuneUp        dc.w    31
  1745.  
  1746. ;---- Audio Channel Toggles ----
  1747.  
  1748. CheckToggle
  1749.     MOVE.W    MouseY2,D0
  1750.     CMP.W    #1,CurrScreen
  1751.     BNE    Return1
  1752.     CMP.W    #44,D0
  1753.     BHS    Return1
  1754. DoToggleMute
  1755.     CMP.W    #34,D0
  1756.     BHS.S    ToggleCh4
  1757.     CMP.W    #23,D0
  1758.     BHS.S    ToggleCh3
  1759.     CMP.W    #12,D0
  1760.     BHS.S    ToggleCh2
  1761. ToggleCh1
  1762.     LEA    audchan1toggle(PC),A0
  1763.     BRA.S    TogCh
  1764. ToggleCh2
  1765.     LEA    audchan2toggle(PC),A0
  1766.     BRA.S    TogCh
  1767. ToggleCh3
  1768.     LEA    audchan3toggle(PC),A0
  1769.     BRA.S    TogCh
  1770. ToggleCh4
  1771.     LEA    audchan4toggle(PC),A0
  1772. TogCh    CLR.B    RawKeyCode
  1773.     EOR.W    #1,(A0)
  1774.     BSR    WaitForButtonUp
  1775.     CLR.W    D0
  1776.     MOVE.W    audchan4toggle(PC),D0
  1777.     LSL.B    #1,D0
  1778.     OR.W    audchan3toggle(PC),D0
  1779.     LSL.B    #1,D0
  1780.     OR.W    audchan2toggle(PC),D0
  1781.     LSL.B    #1,D0
  1782.     OR.W    audchan1toggle(PC),D0
  1783.     MOVE.W    D0,ActiveChannels
  1784.     BSR.S    RedrawToggles
  1785.     BSR    Wait_4000
  1786.     BRA    Wait_4000
  1787.  
  1788. RedrawToggles
  1789.     CMP.W    #1,CurrScreen
  1790.     BNE    Return1
  1791.     LEA    audchan1toggle(PC),A0
  1792.     BSR.S    RedrawSingleTogg
  1793.     LEA    audchan2toggle(PC),A0
  1794.     BSR.S    RedrawSingleTogg
  1795.     LEA    audchan3toggle(PC),A0
  1796.     BSR.S    RedrawSingleTogg
  1797.     LEA    audchan4toggle(PC),A0
  1798. RedrawSingleTogg
  1799.     LEA    BitplaneData,A1
  1800.     MOVEQ    #0,D0
  1801.     MOVE.W    2(A0),D0
  1802.     ADD.L    D0,A1
  1803.     MOVEQ    #0,D0
  1804.     MOVE.W    4(A0),D0
  1805.     LEA    ToggleONdata,A2
  1806.     TST.W    (A0)
  1807.     BNE.S    rtskip
  1808.     LEA    ToggleOFFdata,A2
  1809. rtskip    ADD.L    D0,A2
  1810.     MOVEQ    #10,D4
  1811. rtloop2    MOVE.W    88(A2),10240(A1)
  1812.     MOVE.W    (A2)+,(A1)
  1813.     LEA    40(A1),A1
  1814.     DBRA    D4,rtloop2
  1815.     RTS
  1816.  
  1817. rtdoit    MOVEQ    #10,D4
  1818. rtloop    MOVE.W    132(A2),10240(A1)
  1819.     MOVE.W    (A2)+,(A1)
  1820.     LEA    40(A1),A1
  1821.     DBRA    D4,rtloop
  1822.     RTS
  1823.  
  1824. ;---- VU Meters ----
  1825.  
  1826. VUmeters
  1827.     LEA    audchan1temp,A1
  1828.     LEA    VUSpriteData1,A2
  1829.     MOVE.W    audchan1toggle(PC),D0
  1830.     BSR.S    OneVUmeter
  1831.     LEA    audchan2temp,A1
  1832.     LEA    VUSpriteData2,A2
  1833.     MOVE.W    audchan2toggle(PC),D0
  1834.     BSR.S    OneVUmeter
  1835.     LEA    audchan3temp,A1
  1836.     LEA    VUSpriteData3,A2
  1837.     MOVE.W    audchan3toggle,D0
  1838.     BSR.S    OneVUmeter
  1839.     LEA    audchan4temp,A1
  1840.     LEA    VUSpriteData4,A2
  1841.     MOVE.W    audchan4toggle,D0
  1842. OneVUmeter
  1843.     TST.L    RunMode
  1844.     BEQ.S    VUmeterDown
  1845.     TST.W    (A1)
  1846.     BEQ.S    VUmeterDown
  1847.     TST.W    D0
  1848.     BEQ.S    VUmeterDown
  1849.     TST.L    Counter
  1850.     BNE.S    VUmeterDown
  1851.     MOVEQ    #0,D0    ; New note
  1852.     MOVE.B    n_volume(A1),D0    ; Get volume
  1853.     CMP.W    #$40,D0    ; Higher than $40 ?
  1854.     BLS.S    iccskip    ; No, skip
  1855.     MOVEQ    #$40,D0    ; Yes, set to $40
  1856. iccskip    LEA    VUmeterHeights(PC),A3
  1857.     MOVE.B    #233,D7        ; Set to 233
  1858.     SUB.B    0(A3,D0.W),D7    ; Subtract to get new height
  1859.     MOVE.B    D7,(A2)
  1860.     RTS
  1861.  
  1862. VUmeterDown
  1863.     CMP.B    #233,(A2)
  1864.     BEQ    Return1
  1865.     ADDQ.B    #1,(A2)
  1866.     RTS    
  1867.  
  1868. audchan1toggle    dc.w    1,78,0
  1869. Chan1Volume    dc.w    0
  1870. audchan2toggle    dc.w    1,518,$16
  1871. Chan2Volume    dc.w    0
  1872. audchan3toggle    dc.w    1,958,$2C
  1873. Chan3Volume    dc.w    0
  1874. audchan4toggle    dc.w    1,1398,$42
  1875. Chan4Volume    dc.w    0
  1876. ActiveChannels    dc.w    15
  1877.  
  1878. VUmeterHeights
  1879.     dc.b    0,0,1,2,2,3,4,5,5,6,7,8,8,9,10,11
  1880.     dc.b    11,12,13,14,14,15,16,17,17,18,19,20,20,21,22,23
  1881.     dc.b    23,24,25,26,26,27,28,29,29,30,31,32,32,33,34,35
  1882.     dc.b    35,36,37,38,38,39,40,41,41,42,43,44,44,45,46,47
  1883.     dc.b    47,0
  1884.  
  1885. SetAnalyzerVolumes
  1886.     MOVEM.L    D0-D3/A0,-(SP)
  1887.     LSL.W    #8,D2
  1888.     DIVU    #640,D2
  1889.     CMP.W    #$F0A0,A5
  1890.     BNE.S    savCh2
  1891.     TST.W    audchan1toggle
  1892.     BEQ.S    savCh2
  1893.     CMP.W    Chan1Volume,D2 ; volume
  1894.     BLO.S    savCh2
  1895.     MOVE.W    D2,Chan1Volume
  1896. savCh2    CMP.W    #$F0B0,A5
  1897.     BNE.S    savCh3
  1898.     TST.W    audchan2toggle
  1899.     BEQ.S    savCh3
  1900.     CMP.W    Chan2Volume,D2
  1901.     BLO.S    savCh3
  1902.     MOVE.W    D2,Chan2Volume
  1903. savCh3    CMP.W    #$F0C0,A5
  1904.     BNE.S    savCh4
  1905.     TST.W    audchan3toggle
  1906.     BEQ.S    savCh4
  1907.     CMP.W    Chan3Volume,D2
  1908.     BLO.S    savCh4
  1909.     MOVE.W    D2,Chan3Volume
  1910. savCh4    CMP.W    #$F0D0,A5
  1911.     BNE.S    savNone
  1912.     TST.W    audchan4toggle
  1913.     BEQ.S    savNone
  1914.     CMP.W    Chan4Volume,D2
  1915.     BLO.S    savNone
  1916.     MOVE.W    D2,Chan4Volume
  1917. savNone    MOVEM.L    (SP)+,D0-D3/A0
  1918.     MOVEQ    #1,D4
  1919.     RTS
  1920.  
  1921. ;---- Disk Op. ----
  1922.  
  1923. DiskOp    CLR.B    RawKeyCode
  1924.     MOVE.W    CurrScreen,D0
  1925.     CMP.W    #3,D0
  1926.     BEQ    ExitFromDir
  1927.     CMP.W    #1,D0
  1928.     BNE    Return1
  1929. ShowDirScreen
  1930.     BSR    WaitForButtonUp
  1931.     MOVE.W    #3,CurrScreen
  1932.     ST    DisableAnalyzer
  1933.     ST    NoSampleInfo
  1934.     JSR    ClearAnalyzerColors
  1935.     BSR    Clear100Lines
  1936.     BSR.S    SwapDirScreen
  1937.     BEQ    DisplayMainAll
  1938.     BSR    ShowDiskSpace
  1939.     BSR    ShowModPackMode
  1940.     BSR    ShowPackMode
  1941.     BSR    ShowRAWIFFmode
  1942. DoAutoDir
  1943.     TST.B    AutoDirFlag
  1944.     BEQ    SelectPath
  1945.     MOVE.W    DirPathNum,D0 
  1946.     BEQ    LoadModuleGadg
  1947.     CMP.W    #1,D0
  1948.     BEQ    LoadSongGadg
  1949.     CMP.W    #2,D0
  1950.     BEQ    LoadSampleGadg
  1951.     BRA    SelectModules
  1952. SelectPath
  1953.     MOVE.W    DirPathNum,D0 
  1954.     BEQ    SelectModules
  1955.     CMP.W    #1,D0
  1956.     BEQ    SelectSongs
  1957.     BRA    SelectSamples
  1958.  
  1959. SwapDirScreen
  1960.     MOVE.L    DecompMemPtr,D0
  1961.     BEQ.S    sdirs2
  1962.     MOVE.L    D0,A1
  1963.     BSR.S    ssets3
  1964.     BRA    FreeDecompMem
  1965. sdirs2    LEA    DirScreenData,A0
  1966.     MOVE.L    #DirScreenSize,D0
  1967.     BSR    Decompact
  1968.     BEQ    Return1
  1969. ssets3    LEA    BitplaneData,A0
  1970.     MOVEQ    #1,D2
  1971. sxloop1    MOVE.W    #999,D0
  1972. sxloop2    MOVE.L    (A0),D1
  1973.     MOVE.L    (A1),(A0)+
  1974.     MOVE.L    D1,(A1)+
  1975.     DBRA    D0,sxloop2
  1976.     LEA    6240(A0),A0
  1977.     DBRA    D2,sxloop1
  1978.     RTS
  1979.  
  1980. CheckDirGadgets
  1981.     MOVEM.W    MouseX2,D0/D1
  1982.     CMP.W    #44,D1
  1983.     BHI    CheckDirGadgets2
  1984.     CMP.W    #33,D1
  1985.     BLS.S    ExtrasMenu
  1986.     CMP.W    #11,D0
  1987.     BLO    DirBrowseGadg
  1988.     CMP.W    #187,D0
  1989.     BLO    DirPathGadg
  1990.     CMP.W    #216,D0
  1991.     BLO    ParentDirGadg
  1992.     CMP.W    #307,D0
  1993.     BLO    ShowFreeDiskGadg
  1994.     BRA    CheckDirGadgets2
  1995.  
  1996. ExtrasMenu
  1997.     CMP.W    #94,D0
  1998.     BHS    ToggleMenu
  1999.     CMP.W    #22,D1
  2000.     BHI.S    DeleteFileGadg
  2001.     CMP.W    #11,D1
  2002.     BHI.S    RenameFileGadg
  2003.     BRA    DiskFormatGadg
  2004.  
  2005. RenameFileGadg
  2006.     BSR    StorePtrCol
  2007.     BSR    WaitForButtonUp
  2008.     BSR    ClearFileNames
  2009.     MOVE.L    PathPtr,A4
  2010.     BSR    ShowDirPath
  2011.     LEA    FileNamesPtr(PC),A5
  2012.     BSR    HasDiskChanged
  2013.     BEQ.S    RenameFileDirOk
  2014.     BSR    ClearDirTotal
  2015.     BSR    DirDisk
  2016.     BNE    RestorePtrCol
  2017.  
  2018. RenameFileDirOk
  2019.     MOVE.W    FileNameScrollPos,D0
  2020.     BSR    RedrawFileNames
  2021.     MOVE.W    #10,Action
  2022.     LEA    SelectFileText,A0
  2023.     JSR    ShowStatusText
  2024.     BRA    RestorePtrCol
  2025.  
  2026. DeleteFileGadg
  2027.     MOVE.W    DirPathNum,D0
  2028.     BEQ    DeleteModuleGadg
  2029.     CMP.W    #1,D0
  2030.     BEQ    DeleteSongGadg
  2031.     CMP.W    #2,D0
  2032.     BEQ    DeleteSampleGadg
  2033.     RTS
  2034.  
  2035. ToggleMenu
  2036.     CMP.W    #146,D0
  2037.     BHS    SelectMenu
  2038.     CMP.W    #22,D1
  2039.     BHI    ToggleIFFSave
  2040.     CMP.W    #11,D1
  2041.     BHI.S    ToggleSongPack
  2042. ToggleModPack
  2043.     CLR.B    ModPackMode
  2044.     BSR    ShowNotImpl
  2045. ShowModPackMode
  2046.     LEA    ToggleOFFText(PC),A0
  2047.     TST.B    ModPackMode
  2048.     BEQ.S    smpmskp
  2049.     LEA    ToggleONText2(PC),A0
  2050. smpmskp    MOVEQ    #3,D0
  2051.     MOVE.W    #175,D1
  2052.     JSR    ShowText3
  2053.     BRA    WaitForButtonUp
  2054.  
  2055. ShowNotImpl
  2056.     LEA    NotImplText(PC),A0
  2057.     JSR    ShowStatusText
  2058.     BRA    SetErrorPtrCol
  2059.  
  2060. NotImplText    dc.b    'Not implemented',0
  2061.  
  2062. ToggleSongPack
  2063.     EOR.B    #1,PackMode
  2064. ShowPackMode
  2065.     LEA    ToggleOFFText(PC),A0
  2066.     TST.B    PackMode
  2067.     BEQ.S    spsskip
  2068.     LEA    ToggleONText2(PC),A0
  2069. spsskip    MOVEQ    #3,D0
  2070.     MOVE.W    #615,D1
  2071.     JSR    ShowText3
  2072.     BRA    WaitForButtonUp
  2073.  
  2074. ToggleIFFSave
  2075.     EOR.B    #1,RAWIFFMode
  2076. ShowRAWIFFMode
  2077.     LEA    RAWText(PC),A0
  2078.     TST.B    RAWIFFMode
  2079.     BEQ.S    sraffu
  2080.     LEA    IFFText(PC),A0
  2081. sraffu    MOVEQ    #3,D0
  2082.     MOVE.W    #1055,D1
  2083.     JSR    ShowText3
  2084.     BRA    WaitForButtonUp
  2085.  
  2086. RAWText    dc.b "RAW",0
  2087. IFFText    dc.b "IFF",0
  2088.  
  2089. SelectMenu
  2090.     CMP.W    #156,D0
  2091.     BHS    LoadMenu
  2092.     CMP.W    #22,D1
  2093.     BHI    SelectSamples
  2094.     CMP.W    #11,D1
  2095.     BHI    SelectSongs
  2096.     BRA    SelectModules
  2097.  
  2098. LoadMenu
  2099.     CMP.W    #238,D0
  2100.     BHS.S    SaveMenu
  2101.     CMP.W    #22,D1
  2102.     BHI    LoadSampleGadg
  2103.     CMP.W    #11,D1
  2104.     BHI    LoadSongGadg
  2105.     BRA    LoadModuleGadg
  2106.  
  2107. SaveMenu
  2108.     CMP.W    #22,D1
  2109.     BHI    SaveSampleGadg
  2110.     CMP.W    #11,D1
  2111.     BHI    SaveSongGadg
  2112.     BRA    SaveModuleGadg
  2113.  
  2114. CheckDirGadgets2
  2115.     MOVEM.W    MouseX2,D0/D1
  2116.     CMP.W    #3,CurrScreen
  2117.     BNE    Return1
  2118.     CMP.W    #307,D0
  2119.     BLO    FileNamePressed
  2120.     CMP.W    #44,D1
  2121.     BLS    FileNameOneUp
  2122.     CMP.W    #89,D1
  2123.     BLO.S    ExitFromDir
  2124.     BRA    FileNameOneDown
  2125.  
  2126. ExitFromDir
  2127.     BSR    WaitForButtonUp
  2128.     CLR.B    RawKeyCode
  2129.     BSR    SwapDirScreen
  2130.     BSR    Clear100Lines
  2131. DisplayMainAll
  2132.     BSR    DisplayMainScreen
  2133.     JSR    ShowSongLength
  2134.     JSR    ShowSampleInfo
  2135.     JSR    ShowSongName
  2136.     JSR    Show_MS
  2137.     TST.W    LoadInProgress
  2138.     BNE.S    dimaskp
  2139.     JSR    ShowAllRight
  2140. dimaskp    JMP    ShowPosition
  2141.  
  2142. DirBrowseGadg
  2143.     MOVEQ    #0,D3
  2144.     MOVE.W    DirPathNum,D3
  2145.     LEA    dpnum(PC),A0
  2146.     ADD.L    D3,A0
  2147.     MOVEQ    #0,D0
  2148.     MOVE.B    (A0),D0
  2149.     ADDQ.B    #1,D0
  2150.     CMP.B    #7,D0
  2151.     BLO.S    dbgskip
  2152.     MOVEQ    #0,D0
  2153. dbgskip    MOVE.B    D0,(A0)
  2154.     MULU    #5,D0
  2155.     MOVE.L    PathPtr,A0
  2156.     MOVEQ    #63,D1
  2157.     MOVEQ    #0,D2
  2158. dbglop1    MOVE.B    D2,(A0)+
  2159.     DBRA    D1,dbglop1
  2160.     LEA    dirpaths(PC),A0
  2161.     LEA    -5(A0,D0.W),A0
  2162.     TST.W    D0
  2163.     BNE.S    dbgskp2
  2164.     LEA    ModulesPath,A0
  2165.     TST.W    D3
  2166.     BEQ.S    dbgskp2
  2167.     LEA    SongsPath,A0
  2168.     CMP.W    #1,D3
  2169.     BEQ.S    dbgskp2
  2170.     LEA    SamplePath,A0
  2171. dbgskp2    MOVE.L    PathPtr,A1
  2172. dbglop2    MOVE.B    (A0)+,(A1)+
  2173.     BNE.S    dbglop2
  2174.     BSR    ShowDirPath
  2175.     MOVE.W    #3,WaitTime
  2176.     BRA    WaitALittle
  2177.  
  2178. dirpaths
  2179.     dc.b "DF0:",0,"DF1:",0,"DH0:",0,"DH1:",0,"RAM:",0,"ST-00:",0
  2180. dpnum    dc.b 0,0,0,0
  2181. DirPathNum
  2182.     dc.w 3
  2183.  
  2184. SelectModules
  2185.     MOVEQ    #0,D0
  2186.     BRA.S    ChangePath
  2187. SelectSongs
  2188.     MOVEQ    #1,D0
  2189.     BRA.S    ChangePath
  2190. SelectSamples
  2191.     MOVEQ    #2,D0
  2192. ChangePath
  2193.     MOVE.L    TextBplPtr,A0
  2194.     LEA    178(A0),A0
  2195.     MOVEQ    #0,D2
  2196.     MOVEQ    #26,D1
  2197. chpalop    MOVE.W    D2,(A0)
  2198.     LEA    40(A0),A0
  2199.     DBRA    D1,chpalop
  2200.     LEA    ModulesPath2,A4
  2201.     MOVE.W    #178,D1
  2202.     MOVE.W    D0,DirPathNum
  2203.     BEQ.S    chpaski
  2204.     LEA    SongsPath2,A4
  2205.     MOVE.W    #618,D1
  2206.     CMP.W    #1,D0
  2207.     BEQ.S    chpaski
  2208.     LEA    SamplePath2,A4
  2209.     MOVE.W    #1058,D1
  2210. chpaski    MOVE.L    TextBplPtr,A0
  2211.     LEA    (A0,D1.W),A0
  2212.     MOVE.W    #$0100,(A0)
  2213.     MOVE.W    #$0F80,40(A0)
  2214.     MOVE.W    #$0FC0,80(A0)
  2215.     MOVE.W    #$0F80,120(A0)
  2216.     MOVE.W    #$0100,160(A0)
  2217.     MOVE.L    A4,PathPtr
  2218.     BSR    ShowDirPath
  2219.     BRA    WaitForButtonUp
  2220.  
  2221. ;---- Song Gadgets ----
  2222.  
  2223. LoadSongGadg
  2224.     BSR    StorePtrCol
  2225.     BSR    WaitForButtonUp
  2226.     BSR    ClearFileNames
  2227.     BSR    SelectSongs
  2228.     LEA    FileNamesPtr(PC),A5
  2229.     BSR    HasDiskChanged
  2230.     BEQ    LoadSongDirOk
  2231.     BSR    ClearDirTotal
  2232.     BSR    DirDisk
  2233.     BNE    RestorePtrCol
  2234. LoadSongDirOk
  2235.     MOVE.W    FileNameScrollPos,D0
  2236.     BSR    RedrawFileNames
  2237.     MOVE.W    #1,Action
  2238.     LEA    SelectSongText,A0
  2239.     JSR    ShowStatusText
  2240.     BRA    RestorePtrCol
  2241.  
  2242. SaveSongGadg
  2243.     BSR    SelectSongs
  2244.     LEA    SaveSongText,A0
  2245.     BSR    AreYouSure
  2246.     BNE    Return1
  2247.     BSR    RestorePtrCol
  2248.     BSR    ClearFileNames
  2249.     BSR    StopIt
  2250.     JSR    SaveSong
  2251.     MOVE.W    #1,Action
  2252.     RTS
  2253.  
  2254. DeleteSongGadg
  2255.     BSR    WaitForButtonUp
  2256.     BSR    ClearFileNames
  2257.     BSR    SelectSongs
  2258.     LEA    FileNamesPtr(PC),A5
  2259.     BSR    HasDiskChanged
  2260.     BEQ.S    DeleteSongDirOk
  2261.     BSR    ClearDirTotal
  2262.     BSR    DirDisk
  2263.     BEQ.S    DeleteSongDirOk
  2264.     BRA    RestorePtrCol
  2265.  
  2266. DeleteSongDirOk
  2267.     MOVE.W    FileNameScrollPos,D0
  2268.     BSR    RedrawFileNames
  2269.     MOVE.W    #2,Action
  2270.     LEA    SelectSongText,A0
  2271.     JSR    ShowStatusText
  2272.     BRA    SetDeletePtrCol
  2273.  
  2274. ;---- Module Gadgets ----
  2275.  
  2276. LoadModuleGadg
  2277.     BSR    StorePtrCol
  2278.     BSR    WaitForButtonUp
  2279.     BSR    ClearFileNames
  2280.     BSR    SelectModules
  2281.     LEA    FileNamesPtr(PC),A5
  2282.     BSR    HasDiskChanged
  2283.     BEQ.S    LoadModDirOk
  2284.     BSR    ClearDirTotal
  2285.     BSR    DirDisk
  2286.     BEQ.S    LoadModDirOk
  2287.     BRA    RestorePtrCol
  2288.  
  2289. LoadModDirOk
  2290.     MOVE.W    FileNameScrollPos,D0
  2291.     BSR    RedrawFileNames
  2292.     MOVE.W    #3,Action
  2293.     LEA    SelectModuleText,A0
  2294.     JSR    ShowStatusText
  2295.     BRA    RestorePtrCol
  2296.  
  2297. SaveModuleGadg
  2298.     BSR    SelectModules
  2299.     LEA    SaveModuleText,A0
  2300.     BSR    AreYouSure
  2301.     BNE    Return1
  2302.     JSR    SaveModule
  2303.     MOVE.W    #3,Action
  2304.     JMP    ShowAllRight
  2305.  
  2306. DeleteModuleGadg
  2307.     BSR    WaitForButtonUp
  2308.     BSR    ClearFileNames
  2309.     BSR    SelectModules
  2310.     LEA    FileNamesPtr(PC),A5
  2311.     BSR    HasDiskChanged
  2312.     BEQ.S    DeleteModDirOk
  2313.     BSR    ClearDirTotal
  2314.     BSR    DirDisk
  2315.     BEQ.S    DeleteModDirOk
  2316.     BRA    RestorePtrCol
  2317.  
  2318. DeleteModDirOk
  2319.     MOVE.W    FileNameScrollPos(PC),D0
  2320.     BSR    RedrawFileNames
  2321.     MOVE.W    #4,Action
  2322.     LEA    SelectModuleText,A0
  2323.     JSR    ShowStatusText
  2324.     BRA    SetDeletePtrCol
  2325.  
  2326. ;---- Sample Gadgets ----
  2327.  
  2328. LoadSampleGadg
  2329.     BSR    StorePtrCol
  2330.     BSR    WaitForButtonUp
  2331.     BSR    ClearFileNames
  2332.     BSR    SelectSamples
  2333.     LEA    FileNamesPtr(PC),A5
  2334.     BSR    HasDiskChanged
  2335.     BEQ.S    LoadSampleDirOk
  2336.     BSR    ClearDirTotal
  2337.     BSR    DirDisk
  2338.     BEQ.S    LoadSampleDirOk
  2339.     BRA    RestorePtrCol
  2340.  
  2341. LoadSampleDirOk
  2342.     MOVE.W    FileNameScrollPos,D0
  2343.     BSR    RedrawFileNames
  2344.     MOVE.W    #5,Action
  2345.     LEA    SelectSampleText,A0
  2346.     JSR    ShowStatusText
  2347.     BRA    RestorePtrCol
  2348.  
  2349. SaveSampleGadg
  2350.     BSR    SelectSamples
  2351.     CLR.B    RawKeyCode
  2352.     MOVE.W    InsNum,D0
  2353.     BEQ    NotSampleNull
  2354.     LEA    SaveSampleText,A0
  2355.     BSR    AreYouSure
  2356.     BNE    Return1
  2357. dosavesample
  2358.     BSR    StorePtrCol
  2359.     BSR    CreateSampleName
  2360.     MOVE.L    DiskDataLength,D1
  2361.     BEQ    Return1
  2362.     MOVEQ    #0,D1
  2363.     MOVE.W    InsNum,D1
  2364.     LSL.L    #2,D1
  2365.     LEA    SamplePtrs,A0
  2366.     MOVE.L    0(A0,D1.W),DiskDataPtr
  2367.  
  2368.     BSR    SetDiskPtrCol
  2369.     MOVE.L    DOSbase,A6
  2370.     MOVE.L    FileNamePtr,D1
  2371.     MOVE.L    #1006,D2
  2372.     JSR    LVOOpen(A6)
  2373.     MOVE.L    D0,FileHandle
  2374.     BNE    SaveSample
  2375.     JSR    CantOpenFile
  2376.     BRA    ErrorRestoreCol
  2377.  
  2378. SaveSample
  2379.     LEA    SavingSampleText,A0
  2380.     JSR    ShowStatusText
  2381.     TST.B    RAWIFFMode
  2382.     BEQ    savesam
  2383.     MOVE.L    FileHandle,D1
  2384.     MOVE.L    #IFFFORM,D2
  2385.     MOVEQ    #IFFEND-IFFFORM,D3
  2386.     JSR    LVOWrite(A6)
  2387. savesam    MOVE.L    FileHandle,D1
  2388.     MOVE.L    DiskDataPtr,D2
  2389.     MOVE.L    DiskDataLength,D3
  2390.     JSR    LVOWrite(A6)
  2391.  
  2392.     MOVE.L    FileHandle,D1
  2393.     JSR    LVOClose(A6)
  2394.     CLR.L    FileHandle
  2395.     MOVE.W    #5,Action
  2396.     JSR    ShowAllRight
  2397.     BRA    RestorePtrCol
  2398.  
  2399. IFFFORM    dc.b    "FORM"
  2400.     dc.l    0
  2401.     dc.b    "8SVX"
  2402. IFFVHDR    dc.b    "VHDR"
  2403.     dc.l    20
  2404.     dc.l    0,0,32    ; oneshot, repeat, hisamples
  2405.     dc.w    16726    ; This is really NTSC (16574 for PAL!!!)
  2406.     dc.b    1,0    ; octaves, compression
  2407.     dc.l    $10000    ; volume
  2408. IFFNAME    dc.b    "NAME"
  2409.     dc.l    24
  2410.     dcb.b    24,0
  2411.     dc.b    "ANNO"
  2412.     dc.l    16
  2413.     dc.b    "Protracker 1.2A",0
  2414. IFFBODY    dc.b    "BODY"
  2415.     dc.l    0
  2416. IFFEND
  2417.  
  2418.  
  2419. ;---- Delete Sample ----
  2420.  
  2421. DeleteSampleGadg
  2422.     BSR    StorePtrCol
  2423.     BSR    WaitForButtonUp
  2424.     BSR    ClearFileNames
  2425.     BSR    SelectSamples
  2426.     LEA    FileNamesPtr(PC),A5
  2427.     BSR    HasDiskChanged
  2428.     BEQ.S    DeleteSamDirOk
  2429.     BSR    ClearDirTotal
  2430.     BSR    DirDisk
  2431.     BEQ.S    DeleteSamDirOk
  2432.     BRA    RestorePtrCol
  2433.  
  2434. DeleteSamDirOk
  2435.     MOVE.W    FileNameScrollPos(PC),D0
  2436.     BSR    RedrawFileNames
  2437.     MOVE.W    #6,Action
  2438.     LEA    SelectSampleText,A0
  2439.     JSR    ShowStatusText
  2440.     BRA    SetDeletePtrCol
  2441.  
  2442. ;---- Directory Path Gadget ----
  2443.  
  2444. DirPathGadg
  2445.     BSR    StorePtrCol
  2446.     BSR    SetWaitPtrCol
  2447.     MOVE.L    PathPtr,A6
  2448.     MOVE.L    A6,ShowTextPtr
  2449.     MOVE.L    A6,TextEndPtr
  2450.     ADD.L    #63,TextEndPtr
  2451.     MOVE.W    #19,TextLength
  2452.     MOVE.W    #1484,A4
  2453.     BSR    GetTextLine
  2454.     BRA    RestorePtrCol
  2455.  
  2456.  
  2457. CopyPath
  2458.     LEA    FileName,A1
  2459.     TST.B    (A0)        ; If no path
  2460.     BEQ    Return1
  2461. cploop    MOVE.B    (A0)+,(A1)+    ; Copy path to filename
  2462.     BNE.S    cploop
  2463.     CMP.B    #':',-2(A1)    ; If ending with ':' it's ok
  2464.     BEQ.S    PathCharBack
  2465.     CMP.B    #'/',-2(A1)    ; If ending with '/' it's ok
  2466.     BEQ.S    PathCharBack
  2467.     MOVE.B    #'/',-1(A1)    ; Add '/' to end path
  2468.     RTS
  2469.  
  2470. PathCharBack
  2471.     SUBQ.L    #1,A1
  2472.     RTS
  2473.  
  2474. ShowDirPath
  2475.     CMP.W    #3,CurrScreen
  2476.     BNE    Return1
  2477.     MOVEM.L    D0-D7/A0-A6,-(SP)
  2478.     MOVE.L    PathPtr,A0
  2479.     MOVEQ    #19,D0
  2480.     MOVE.W    #1484,D1
  2481.     JSR    ShowText3
  2482.     MOVEM.L    (SP)+,D0-D7/A0-A6
  2483.     RTS
  2484.  
  2485. ;---- File List Gadgets ----
  2486.  
  2487. FileNameOneUp
  2488.     TST.W    Action
  2489.     BEQ    Return1
  2490.     LEA    FileNamesPtr(PC),A5
  2491.     MOVE.W    FileNameScrollPos(PC),D0
  2492.     BEQ    Return1
  2493.     SUBQ.W    #1,D0
  2494.     BTST    #2,$DFF016
  2495.     BNE    RedrawFileNames
  2496.     SUBQ.W    #3,D0
  2497.     BPL    RedrawFileNames
  2498.     MOVEQ    #0,D0
  2499.     BRA    RedrawFileNames
  2500.  
  2501. FileNameOneDown
  2502.     TST.W    Action
  2503.     BEQ    Return1
  2504.     LEA    FileNamesPtr(PC),A5
  2505.     MOVE.W    FileNameScrollPos(PC),D0
  2506.     ADDQ.W    #1,D0
  2507.     BTST    #2,$DFF016
  2508.     BNE.S    fnod2
  2509.     ADDQ.W    #3,D0
  2510. fnod2    MOVE.W    16(A5),D1
  2511.     SUBQ.W    #8,D1
  2512.     BMI    Return1
  2513.     CMP.W    D1,D0
  2514.     BLS    RedrawFileNames
  2515.     MOVE.W    D1,D0
  2516.     BRA    RedrawFileNames
  2517.  
  2518. ;---- Clicked on a filename ----
  2519.  
  2520. FileNamePressed
  2521.     SUB.W    #44,D1
  2522.     MOVE.W    #1,UpdateFreeMem
  2523.     TST.W    Action
  2524.     BEQ    Return1
  2525.     CMP.W    #3,D1
  2526.     BLO    Return1
  2527.     CMP.W    #50,D1
  2528.     BHI    Return1
  2529.     SUBQ.W    #3,D1
  2530.     AND.L    #$FFFF,D1
  2531.     DIVU    #6,D1
  2532.     MOVE.W    D1,FileNameScrollPos+2
  2533.     LEA    FileNamesPtr(PC),A5
  2534.     MOVE.W    FileNameScrollPos(PC),D0
  2535.     ADD.W    D1,D0
  2536.     CMP.W    16(A5),D0
  2537.     BHS    Return1
  2538.     MULU    #36,D0
  2539.     ADD.L    (A5),D0
  2540.     MOVE.L    D0,A0
  2541.     TST.L    32(A0)
  2542.     BMI.S    AddDirectory
  2543.     MOVEQ    #DirNameLength-1,D0
  2544.     LEA    DirInputName,A1
  2545. fnploop    MOVE.B    (A0)+,(A1)+
  2546.     DBRA    D0,fnploop
  2547.     MOVE.W    Action,D6
  2548.     CMP.W    #1,D6
  2549.     BEQ    LoadSong
  2550.     CMP.W    #2,D6
  2551.     BEQ    DeleteSong
  2552.     CMP.W    #3,D6
  2553.     BEQ    xLoadModule
  2554.     CMP.W    #4,D6
  2555.     BEQ    DeleteModule
  2556.     CMP.W    #5,D6
  2557.     BEQ    LoadSample
  2558.     CMP.W    #6,D6
  2559.     BEQ    DeleteSample
  2560.     CMP.W    #10,D6
  2561.     BEQ    RenameFile
  2562.     RTS
  2563.  
  2564. xLoadModule    JMP    LoadModule
  2565.  
  2566. AddDirectory
  2567.     MOVE.L    A0,-(SP)
  2568.     MOVE.L    PathPtr,A0
  2569.     BSR    CopyPath
  2570.     MOVE.L    (SP)+,A0
  2571.     MOVEQ    #DirNameLength-1,D0
  2572. addplop    MOVE.B    (A0)+,(A1)+
  2573.     DBRA    D0,addplop
  2574.     LEA    FileName,A0
  2575.     MOVE.L    PathPtr,A1
  2576.     MOVEQ    #62,D0
  2577. addplp2    MOVE.B    (A0)+,(A1)+
  2578.     DBRA    D0,addplp2
  2579. addpdir    BSR    ShowDirPath
  2580.     MOVE.W    Action,D6
  2581.     CMP.W    #1,D6
  2582.     BEQ    LoadSongGadg
  2583.     CMP.W    #2,D6
  2584.     BEQ    DeleteSongGadg
  2585.     CMP.W    #3,D6
  2586.     BEQ    LoadModuleGadg
  2587.     CMP.W    #4,D6
  2588.     BEQ    DeleteModuleGadg
  2589.     CMP.W    #5,D6
  2590.     BEQ    LoadSampleGadg
  2591.     CMP.W    #6,D6
  2592.     BEQ    DeleteSampleGadg
  2593.     CMP.W    #10,D6
  2594.     BEQ    RenameFileGadg
  2595.     RTS
  2596.  
  2597. ParentDirGadg
  2598.     BSR    WaitForButtonUp
  2599.     MOVE.L    PathPtr,A0
  2600.     MOVE.L    A0,A1
  2601. pdgloop    TST.B    (A1)+
  2602.     BNE.S    pdgloop
  2603.     SUBQ.L    #1,A1
  2604.     CMP.L    A0,A1
  2605.     BLS    Return1
  2606.     SUBQ.L    #1,A1
  2607.     CMP.B    #'/',(A1)
  2608.     BNE.S    pdgskp1
  2609.     CLR.B    (A1)
  2610. pdgskp1    CMP.B    #':',(A1)
  2611.     BEQ.S    addpdir
  2612.     CMP.B    #'/',(A1)
  2613.     BEQ    pdgslsh
  2614.     CLR.B    (A1)
  2615.     CMP.L    A0,A1
  2616.     BLS.S    addpdir
  2617.     SUBQ.L    #1,A1
  2618.     BRA.S    pdgskp1
  2619.  
  2620. pdgslsh    CLR.B    (A1)
  2621.     BRA    addpdir
  2622.  
  2623. FileNamesPtr
  2624.     dc.l    0  ; A5+ 0
  2625.     dc.l    0  ;   + 4
  2626.     dc.l    0  ;   + 8
  2627.     dc.l    0  ;   +12
  2628.     dc.w    0  ;   +16
  2629.     dc.w    24 ;   +18
  2630. FileNameScrollPos
  2631.     dc.w    0
  2632.     dc.w    0
  2633.  
  2634. ;---- Has Disk Changed ----
  2635.  
  2636. HasDiskChanged
  2637.     MOVE.L    DOSbase,A6
  2638.     MOVE.L    A4,D1
  2639.     MOVEQ    #-2,D2
  2640.     JSR    LVOLock(A6)
  2641.     MOVE.L    D0,FileLock
  2642.     BEQ.S    ExamineError
  2643.     MOVE.L    FileLock,D1
  2644.     MOVE.L    #FileInfoBlock,D2
  2645.     JSR    LVOExamine(A6)
  2646.     TST.L    D0
  2647.     BEQ.S    ExamineError
  2648.     LEA    FileInfoBlock,A0
  2649.     MOVE.L    ofib_DateStamp+ds_Days(A0),D0
  2650.     CMP.L    4(A5),D0
  2651.     BNE.S    DiskChanged
  2652.     MOVE.L    ofib_DateStamp+ds_Minute(A0),D0
  2653.     CMP.L    8(A5),D0
  2654.     BNE.S    DiskChanged
  2655.     MOVE.L    ofib_DateStamp+ds_Tick(A0),D0
  2656.     CMP.L    12(A5),D0
  2657.     BNE.S    DiskChanged
  2658.     MOVE.L    FileLock,D1
  2659.     JSR    LVOUnLock(A6)
  2660.     MOVEQ    #0,D0
  2661.     RTS    
  2662.  
  2663. DiskChanged
  2664.     MOVE.L    ofib_DateStamp+ds_Days(A0),4(A5)
  2665.     MOVE.L    ofib_DateStamp+ds_Minute(A0),8(A5)
  2666.     MOVE.L    ofib_DateStamp+ds_Tick(A0),12(A5)
  2667.     MOVE.L    FileLock,D1
  2668.     JSR    LVOUnLock(A6)
  2669.     MOVEQ    #-1,D0
  2670.     RTS
  2671.  
  2672. ExamineError
  2673.     CLR.L    4(A5)
  2674.     MOVEQ    #-1,D0
  2675.     RTS
  2676.  
  2677. ShowFreeDiskGadg
  2678.     BSR    WaitForButtonUp
  2679.     BSR.S    LockAndGetInfo
  2680.     BSR    DirDiskUnlock
  2681.     JMP    ShowAllRight
  2682.  
  2683. LockAndGetInfo
  2684.     BSR    StorePtrCol
  2685.     BSR    SetDiskPtrCol
  2686.     CLR.W    FileNameScrollPos
  2687.     MOVE.L    DOSbase,A6
  2688.     MOVE.L    A4,D1    ; Dir-path in A4
  2689.     MOVEQ    #-2,D2
  2690.     JSR    LVOLock(A6)
  2691.     MOVE.L    D0,FileLock
  2692.     BEQ    DirDiskError
  2693.     LEA    ReadingDirText,A0
  2694.     JSR    ShowStatusText
  2695.     MOVE.L    FileLock,D1
  2696.     MOVE.L    #InfoData,D2
  2697.     JSR    LVOInfo(A6)
  2698.     LEA    InfoData,A0
  2699.     MOVE.L    12(A0),D0 ; id_NumBlocks
  2700.     SUB.L    16(A0),D0 ; id_NumBlocksUsed
  2701.     MULU    22(A0),D0 ; id_BytesPerBlock + 2
  2702.     MOVE.L    D0,FreeDiskSpace
  2703. ShowDiskSpace
  2704.     MOVE.W    #1510,TextOffset
  2705.     MOVE.L    FreeDiskSpace,D7
  2706.     TST.B    ShowDecFlag
  2707.     BNE.S    sdsdec
  2708.     SWAP    D7
  2709.     MOVE.W    D7,WordNumber
  2710.     JSR    PrintHexWord
  2711.     SWAP    D7
  2712.     MOVE.W    D7,WordNumber
  2713.     JSR    PrintHexWord
  2714.     MOVEQ    #0,D0
  2715.     RTS
  2716.  
  2717. sdsdec    DIVU    #10000,D7
  2718.     MOVE.W    D7,WordNumber
  2719.     JSR    Print4DecDigits
  2720.     SWAP    D7
  2721.     MOVE.W    D7,WordNumber
  2722.     JSR    Print4DecDigits
  2723.     MOVEQ    #0,D0
  2724.     RTS
  2725.  
  2726. ;---- Get Disk Directory ----
  2727.  
  2728. AllocDirMem
  2729.     ADD.W    #50,DirEntries
  2730.     MOVE.W    DirEntries,D0
  2731.     MULU    #36,D0
  2732.     MOVE.L    DirAllocSize(PC),D6
  2733.     MOVE.L    D0,DirAllocSize
  2734.     MOVE.L    #MEMF_CLEAR,D1
  2735.     MOVE.L    4.W,A6
  2736.     JSR    LVOAllocMem(A6)
  2737.     MOVE.L    D0,D7
  2738.     BEQ.S    baehsj
  2739.  
  2740.     MOVE.L    FileNamesPtr(PC),D1
  2741.     MOVE.L    D7,FileNamesPtr
  2742.     TST.L    D1
  2743.     BEQ    Return1
  2744.     TST.L    D6
  2745.     BEQ    Return1
  2746.     MOVE.L    D1,A0
  2747.     MOVE.L    D7,A1
  2748.     MOVE.L    D6,D0
  2749. admloop    MOVE.B    (A0)+,(A1)+
  2750.     SUBQ.L    #1,D6
  2751.     BNE.S    admloop
  2752.     MOVE.L    D1,A1
  2753.     MOVE.L    4.W,A6
  2754.     JSR    LVOFreeMem(A6)
  2755.     RTS
  2756.  
  2757. FreeDirMem
  2758.     MOVE.L    FileNamesPtr(PC),D1
  2759.     BEQ    Return1
  2760.     MOVE.L    D1,A1
  2761.     MOVE.L    DirAllocSize(PC),D0
  2762.     MOVE.L    4.W,A6
  2763.     JSR    LVOFreeMem(A6)
  2764.     CLR.L    FileNamesPtr
  2765.     CLR.W    DirAllocSize
  2766.     CLR.W    DirEntries
  2767.     RTS
  2768.  
  2769. baehsj    BSR    OutOfMemErr
  2770.     MOVEQ    #-1,D0
  2771.     RTS
  2772.  
  2773. DirAllocSize    dc.l    0
  2774. DirEntries    dc.w    0
  2775.  
  2776. DirDisk    BSR    FreeDirMem
  2777.     BSR    AllocDirMem
  2778.     BSR    LockAndGetInfo
  2779.     BNE    Return1
  2780.     MOVE.L    FileLock,D1
  2781.     MOVE.L    #FileInfoBlock,D2
  2782.     JSR    LVOExamine(A6)
  2783.     TST.L    D0
  2784.     BEQ    DirDiskError
  2785. ddloop1    MOVE.L    FileLock,D1
  2786.     MOVE.L    #FileInfoBlock,D2
  2787.     MOVE.L    DOSBase,A6
  2788.     JSR    LVOExNext(A6)
  2789.     TST.L    D0
  2790.     BEQ    DirDiskUnlock
  2791.     BTST    #2,$DFF016
  2792.     BEQ.S    AbortDir
  2793.     BSR    NewDirEntry
  2794.     BRA.S    ddloop1
  2795.  
  2796. AbortDir
  2797.     CLR.L    4(A5)
  2798.     LEA    DirAbortedText(PC),A0
  2799.     JSR    ShowStatusText
  2800.     BSR.S    DirDiskUnlock
  2801.     BSR    WaitALittle
  2802.     JSR    ShowAllRight
  2803.     MOVEQ    #0,D0
  2804.     RTS
  2805.  
  2806. DirDiskUnlock
  2807.     MOVE.L    FileLock,D1
  2808.     JSR    LVOUnLock(A6)
  2809.     BSR    RestorePtrCol
  2810.     MOVEQ    #0,D0
  2811.     RTS
  2812.  
  2813. DirAbortedText    dc.b 'dir aborted !',0
  2814.  
  2815. DirDiskError
  2816.     TST.L    FileLock
  2817.     BEQ.S    ddeskip
  2818.     MOVE.L    FileLock,D1
  2819.     JSR    LVOUnLock(A6)
  2820. ddeskip    BSR    RestorePtrCol
  2821.     LEA    CantFindDirText,A0
  2822.     JSR    ShowStatusText
  2823.     BSR    SetErrorPtrCol
  2824.     MOVEQ    #-1,D0
  2825.     RTS
  2826.  
  2827. ClearDirTotal
  2828.     CLR.W    16(A5)
  2829.     RTS    
  2830.  
  2831. CantFindDirText    dc.b "can't find dir !",0,0
  2832.  
  2833.  
  2834. NewDirEntry
  2835.     LEA    FIB_FileName,A0
  2836.     TST.B    ShowDirsFlag
  2837.     BNE.S    ndeok1
  2838.     TST.L    FIB_EntryType
  2839.     BPL    Return1
  2840. ndeok1    TST.L    FIB_EntryType
  2841.     BPL    ndeok2
  2842.     TST.B    ModOnlyFlag
  2843.     BEQ.S    ndeok2
  2844.     TST.W    DirPathNum
  2845.     BNE.S    ndeok2
  2846.     MOVE.L    (A0),D0
  2847.     AND.L    #$CFCFCFCF,D0
  2848.     CMP.L    #$4D4F440E,D0 ; MOD.
  2849.     BNE    Return1
  2850. ndeok2    MOVE.W    16(A5),D0
  2851.     CMP.W    DirEntries,D0
  2852.     BLO.S    ndeok3
  2853.     MOVE.L    A0,-(SP)
  2854.     BSR    AllocDirMem
  2855.     MOVE.L    (SP)+,A0
  2856. ndeok3    MOVE.W    16(A5),D6
  2857.     BEQ.S    ndeadd1        ; If first entry
  2858.     SUBQ.W    #1,D6
  2859.     MOVE.L    (A5),A1
  2860. ndeloopname
  2861.     MOVEQ    #0,D2
  2862.     MOVE.L    FIB_EntryType,D0
  2863.     MOVE.L    32(A1),D1
  2864.     TST.L    D0
  2865.     BPL.S    ndesfil    ; if directory, all is well
  2866.     TST.L    D1
  2867.     BMI.S    ndenext    ; was file, so skip if directory
  2868.     BRA.S    ndelopc
  2869. ndesfil    TST.L    D1    ; if file
  2870.     BPL.S    ndeinse
  2871. ndelopc    MOVE.B    (A0,D2.W),D0 ; Get a character
  2872.     BEQ.S    ndeinse
  2873.     CMP.B    #96,D0  ; Lowercase?
  2874.     BLO.S    ndeskp1
  2875.     SUB.B    #32,D0    ; Switch to upper
  2876. ndeskp1    MOVE.B    (A1,D2.W),D1
  2877.     BEQ.S    ndenext
  2878.     CMP.B    #96,D1
  2879.     BLO.S    ndeskp2
  2880.     SUB.B    #32,D1
  2881. ndeskp2    CMP.B    D0,D1
  2882.     BHI.S    ndeinse
  2883.     BNE.S    ndenext
  2884.     ADDQ.W    #1,D2
  2885.     BRA.S    ndelopc
  2886. ndenext    LEA    36(A1),A1    ; next entry
  2887.     DBRA    D6,ndeloopname    ; loop entries
  2888.     MOVE.L    (A5),A1
  2889.     MOVE.W    16(A5),D0
  2890.     MULU    #36,D0
  2891.     ADD.W    D0,A1
  2892.     BRA.S    ndeadd2
  2893.  
  2894. ndeinse    MOVE.L    (A5),A2
  2895.     MOVE.W    16(A5),D0
  2896.     MULU    #36,D0
  2897.     ADD.W    D0,A2
  2898.     MOVE.L    A2,A3
  2899.     LEA    36(A3),A3
  2900. nde3loop
  2901.     MOVE.W    -(A2),-(A3)
  2902.     CMP.L    A2,A1
  2903.     BNE.S    nde3loop
  2904.     BRA.S    ndeadd2
  2905.  
  2906. ndeadd1    MOVE.L    (A5),A1            ; Put new filename into list
  2907. ndeadd2    LEA    FIB_FileName,A0
  2908.     MOVE.L    A1,A3
  2909.     MOVEQ    #35,D0             ; Clear old filename
  2910. nde4loop
  2911.     CLR.B    (A3)+
  2912.     DBRA    D0,nde4loop
  2913.     MOVE.W    FIB_DateStamp+ds_Days+2,30(A1)
  2914.     MOVEQ    #-1,D0
  2915.     TST.L    FIB_EntryType
  2916.     BPL    ndefskp
  2917.     MOVE.L    FIB_FileSize,D0
  2918. ndefskp    MOVE.L    D0,32(A1)
  2919.     MOVEQ    #29,D0             ; Copy new filename
  2920. nde4loop2
  2921.     MOVE.B    (A0)+,D1
  2922.     MOVE.B    D1,(A1)+
  2923.     TST.B    D1
  2924.     BEQ.S    nde4skip
  2925.     DBRA    D0,nde4loop2
  2926. nde4skip
  2927.     ADDQ.W    #1,16(A5)    ; Files + 1
  2928.     RTS    
  2929.  
  2930. RedrawFileNames
  2931.     MOVE.W    D0,-(SP)
  2932.     BSR    ShowDirPath
  2933.     MOVE.W    (SP)+,D0
  2934.     MOVE.W    D0,FileNameScrollPos
  2935.     TST.W    16(A5)
  2936.     BEQ    Return1
  2937.     MOVE.L    #1881,A6
  2938.     MOVE.W    A6,TextOffset
  2939.     MOVE.L    (A5),D6
  2940.     MULU    #36,D0
  2941.     ADD.L    D0,D6
  2942.     MOVE.W    16(A5),D0
  2943.     SUB.W    FileNameScrollPos,D0
  2944.     CMP.W    #8,D0
  2945.     BHS.S    ShowFileNames
  2946.     SUBQ.W    #1,D0
  2947.     MOVE.W    D0,D7
  2948.     BRA.S    sfnloop
  2949.  
  2950. ShowFileNames
  2951.     MOVE.W    #$91,D0
  2952.     BSR    WaitForVBlank
  2953.     MOVEQ    #7,D7
  2954. sfnloop    MOVE.W    A6,TextOffset
  2955.     MOVE.L    D6,A0
  2956.     MOVEQ    #0,D0
  2957.     MOVE.W    30(A0),D0
  2958.     BSR    CalculateDate
  2959.     MOVE.W    TheDay(PC),WordNumber    
  2960.     JSR    Print2DecDigits
  2961.     MOVE.W    TheMonth(PC),WordNumber    
  2962.     JSR    Print2DecDigits
  2963.     MOVE.W    TheYear(PC),WordNumber    
  2964.     JSR    Print2DecDigits
  2965.     ADDQ.W    #1,TextOffset
  2966.     MOVE.L    D6,ShowTextPtr
  2967.     MOVE.W    #24,TextLength
  2968.     TST.W    DirPathNum
  2969.     BNE.S    sfnskip
  2970.     TST.B    ModOnlyFlag
  2971.     BEQ.S    sfnskip
  2972.     MOVE.L    D6,A0
  2973.     CMP.L    #"mod.",(A0)
  2974.     BNE.S    sfnskip
  2975.     ADDQ.L    #4,ShowTextPtr
  2976. sfnskip    JSR    SpaceShowText
  2977.     LEA    32(A6),A6
  2978.     MOVE.W    A6,TextOffset
  2979.     MOVE.L    D6,A0
  2980.     MOVE.L    32(A0),D1
  2981.     BMI.S    sfndir
  2982.     TST.B    ShowDecFlag
  2983.     BNE.S    sfndec
  2984.     SWAP    D1
  2985.     AND.W    #$000F,D1
  2986.     BSR    ShowOneDigit
  2987.     MOVE.L    D6,A0
  2988.     MOVE.W    34(A0),WordNumber
  2989.     JSR    PrintHexWord
  2990. sfnend    ADD.L    #36,D6
  2991.     LEA    208(A6),A6
  2992.     DBRA    D7,sfnloop
  2993.     RTS
  2994.  
  2995. sfndec    MOVE.L    D1,D0
  2996.     SUBQ.W    #1,TextOffset
  2997.     JSR    Print6DecDigits
  2998.     BRA.S    sfnend
  2999.  
  3000. sfndir    MOVE.L    #DirText,ShowTextPtr
  3001.     SUBQ.W    #1,TextOffset
  3002.     MOVE.W    #6,TextLength
  3003.     JSR    ShowText
  3004.     BRA.S    sfnend
  3005.  
  3006. ClrFileText    dc.b "    "
  3007.  
  3008. CalculateDate
  3009.     DIVU    #1461,D0
  3010.     LSL.W    #2,D0
  3011.     MOVE.W    D0,TheYear
  3012.     CLR.W    D0
  3013.     SWAP    D0
  3014.     CMP.W    #789,D0
  3015.     BEQ.S    cadleap
  3016.     BLO.S    cadskp2
  3017.     SUBQ.W    #1,D0
  3018. cadskp2    DIVU    #365,D0
  3019.     MOVE.L    D0,D1
  3020.     SWAP    D1
  3021.     CMP.W    #4,D0
  3022.     BLO.S    cadskip
  3023.     SUBQ.W    #1,D0
  3024. cadskip    ADD.W    D0,TheYear
  3025.     LEA    MonthTable(PC),A1
  3026.     MOVEQ    #24,D0
  3027. cadloop    SUBQ.W    #2,D0
  3028.     MOVE.W    (A1,D0.W),D2
  3029.     CMP.W    D2,D1
  3030.     BHS.S    cadskp3
  3031.     TST.W    D0
  3032.     BNE.S    cadloop
  3033. cadskp3    LSR.W    #1,D0
  3034.     ADDQ.W    #1,D0
  3035.     MOVE.W    D0,TheMonth
  3036.     SUB.W    D2,D1
  3037.     ADDQ.W    #1,D1
  3038.     MOVE.W    D1,TheDay
  3039. cadend    MOVEQ    #0,D0
  3040.     MOVE.W    TheYear(PC),D0
  3041.     ADD.W    #78,D0
  3042.     DIVU    #100,D0
  3043.     SWAP    D0
  3044.     MOVE.W    D0,TheYear
  3045.     RTS
  3046. cadleap    ADD.W    #2,TheYear
  3047.     MOVE.W    #2,TheMonth
  3048.     MOVE.W    #29,TheDay
  3049.     BRA    cadend
  3050.  
  3051. TheYear        dc.w 0
  3052. TheMonth    dc.w 0
  3053. TheDay        dc.w 0
  3054. MonthTable    dc.w 0,31,59,90,120,151,181,212,243,273,304,334
  3055. DirText        dc.b " (DIR)"
  3056.  
  3057. ;---- Play Song ----
  3058.  
  3059. PlaySong
  3060.     MOVEQ    #0,D0
  3061. SongFrom
  3062.     BSR    StopIt
  3063.     BTST    #2,$DFF016
  3064.     BNE.S    sofr1
  3065.     MOVE.W    PlayFromPos,D0
  3066. sofr1    MOVE.W    D0,ScrPattPos
  3067.     LSL.W    #4,D0
  3068.     AND.L    #$FFFF,D0
  3069.     MOVE.L    D0,PatternPosition
  3070. wfbu1    BTST    #6,$BFE001
  3071.     BEQ.S    wfbu1
  3072.     CLR.B    RawKeyCode
  3073.     CLR.B    SaveKey
  3074.     BSR    SetPlayPtrCol
  3075.     CLR.W    PatternTicks
  3076.     CLR.L    TimerTicks
  3077.     MOVE.L    #'patp',RunMode
  3078.     CLR.W    DidQuantize
  3079.     MOVE.L    #-1,LongFFFF
  3080.     BSR    SetScrPatternPos
  3081. SetPlayPosition
  3082.     MOVE.L    CurrPos,D0
  3083.     MOVE.L    SongDataPtr,A0
  3084.     CMP.B    sd_numofpatt(A0),D0
  3085.     BHS.S    SongPosToZero
  3086.     MOVE.L    CurrPos,SongPosition
  3087.     RTS
  3088.  
  3089. SongPosToZero
  3090.     CLR.L    SongPosition
  3091.     CLR.L    CurrPos
  3092.     RTS
  3093.  
  3094. ;---- Play Pattern ----
  3095.  
  3096. PlayPattern
  3097.     MOVEQ    #0,D0
  3098. PattFrom
  3099.     BSR    StopIt
  3100.     BTST    #2,$DFF016
  3101.     BNE.S    pafr1
  3102.     MOVE.W    PlayFromPos,D0
  3103. pafr1    MOVE.W    D0,ScrPattPos
  3104.     LSL.W    #4,D0
  3105.     AND.L    #$FFF,D0
  3106.     MOVE.L    D0,PatternPosition
  3107. wfbu2    BTST    #6,$BFE001
  3108.     BEQ.S    wfbu2
  3109.     CLR.B    RawKeyCode
  3110.     CLR.B    SaveKey
  3111.     MOVE.L    #'patt',RunMode
  3112.     BSR    SetPlayPtrCol
  3113. ResetPosition
  3114.     MOVE.L    PatternNumber,SongPosition
  3115.     RTS    
  3116.  
  3117. ;---- Record Pattern/Song ----
  3118.  
  3119. RecordPattern
  3120.     MOVEQ    #0,D0
  3121. RecordFrom
  3122.     TST.W    SamScrEnable
  3123.     BNE    Return1
  3124.     BSR    StopIt
  3125.     BTST    #2,$DFF016
  3126.     BNE.S    refr1
  3127.     MOVE.W    PlayFromPos,D0
  3128. refr1    MOVE.W    D0,ScrPattPos
  3129.     LSL.W    #4,D0
  3130.     AND.L    #$FFF,D0
  3131.     MOVE.L    D0,PatternPosition
  3132. wfbu3    BTST    #6,$BFE001
  3133.     BEQ.S    wfbu3
  3134.     BSR    SetEditPtrCol
  3135.     CLR.B    RawKeyCode
  3136.     CLR.B    SaveKey
  3137.     BSR    SaveUndo
  3138.     MOVE.L    #'edit',EditMode
  3139.     MOVE.L    #'patt',RunMode
  3140.     TST.B    RecordMode
  3141.     BEQ.S    ResetPosition
  3142.     MOVE.L    #'patp',RunMode
  3143.     BRA    SetPlayPosition
  3144.  
  3145. ;---- Show Main Screen ----
  3146.  
  3147. DisplayMainScreen
  3148.     CLR.W    BlockMarkFlag
  3149.     MOVE.W    #1,CurrScreen
  3150.     SF    NoSampleInfo
  3151.     TST.W    LoadInProgress
  3152.     BNE.S    dmsskp3
  3153.     BSR    SetNormalPtrCol
  3154.     TST.W    RunMode
  3155.     BEQ.S    dmsskip
  3156.     BSR    SetPlayPtrCol
  3157. dmsskip    TST.L    EditMode
  3158.     BEQ.S    dmsskp2
  3159.     BSR    SetEditPtrCol
  3160. dmsskp2    BSR    StorePtrCol
  3161. dmsskp3    ST    DisableAnalyzer
  3162.     BSR    ClearAnaHeights
  3163.     BSR    ClearRightArea
  3164.     LEA    TopMenusPos,A0
  3165.     LEA    TopMenusBuffer,A1
  3166.     MOVEQ    #43,D0
  3167. cgloop4    MOVEQ    #24,D1
  3168. cgloop5    MOVE.B    (A1)+,(A0)+
  3169.     MOVE.B    1099(A1),10239(A0)
  3170.     DBRA    D1,cgloop5
  3171.     LEA    15(A0),A0
  3172.     DBRA    D0,cgloop4
  3173.     BSR    RedrawToggles
  3174.     TST.B    EdEnable
  3175.     BNE    EditOp
  3176.     MOVEQ    #0,D4
  3177. RedrawAnaScope
  3178.     MOVE.W    #145,D0
  3179.     BSR    WaitForVBlank
  3180.     SF    ScopeEnable
  3181.     ST    DisableAnalyzer
  3182.     BSR    ClearRightArea
  3183.     LEA    SpectrumAnaData,A0
  3184.     MOVE.L    #SpectrumAnaSize,D0
  3185.     TST.B    AnaScopFlag
  3186.     BEQ.S    cgjojo
  3187.     LEA    ScopeData,A0
  3188.     MOVE.L    #ScopeSize,D0
  3189.  
  3190. cgjojo    BSR    Decompact
  3191.     BEQ    cgjaja
  3192.     LEA    SpectrumAnaPos,A0
  3193.     MOVEQ    #1,D7
  3194. cgloop1    MOVEQ    #54,D6    ; 55 lines in picture.
  3195. cgloop2    MOVEQ    #24,D5    ; 25 bytes(x8)
  3196. cgloop3    MOVE.B    (A1)+,(A0)+
  3197.     DBRA    D5,cgloop3
  3198.     ADDQ.L    #1,A1
  3199.     LEA    15(A0),A0
  3200.     DBRA    D6,cgloop2
  3201.     LEA    $1F68(A0),A0
  3202.     DBRA    D7,cgloop1
  3203.     BSR    FreeDecompMem
  3204. cgjaja    TST.L    D4
  3205.     BNE    Return1
  3206.     TST.B    AnaScopFlag
  3207.     BNE    cgscope
  3208.     BSR    ClearAnaHeights
  3209.     BSR    ClearRightArea
  3210.     SF    DisableAnalyzer
  3211.     BRA    SetAnalyzerColors
  3212. cgscope    ST    ScopeEnable
  3213.     BRA    ClearAnalyzerColors
  3214.     
  3215. ;---- Clear Areas ----
  3216.  
  3217. ClearFileNames    MOVE.W    #145,D0
  3218.     BSR    WaitForVBlank
  3219.     MOVE.L    TextBplPtr,A1
  3220.     LEA    1800(A1),A1
  3221.     MOVE.W    #549,D0
  3222.     MOVEQ    #0,D1
  3223. cfnloop    MOVE.L    D1,(A1)+
  3224.     DBRA    D0,cfnloop
  3225.     RTS
  3226.  
  3227. ClearRightArea
  3228.     MOVE.L    TextBplPtr,A0
  3229.     LEA    55(A0),A0
  3230.     MOVEQ    #0,D2
  3231.     MOVEQ    #98,D0
  3232. cnblloop1
  3233.     MOVEQ    #24,D1
  3234. cnblloop2
  3235.     MOVE.B    D2,(A0)+
  3236.     DBRA    D1,cnblloop2
  3237.     LEA    15(A0),A0
  3238.     DBRA    D0,cnblloop1
  3239.     RTS
  3240.  
  3241. Clear100Lines
  3242.     MOVE.L    TextBplPtr,A0
  3243.     MOVE.W    #999,D0
  3244.     MOVEQ    #0,D1
  3245. chlloop    MOVE.L    D1,(A0)+
  3246.     DBRA    D0,chlloop
  3247.     RTS
  3248.  
  3249. ;---- Are You Sure Requester ----
  3250.  
  3251. AreYouSure
  3252.     MOVE.B    DisableAnalyzer,SaveDA
  3253.     MOVE.B    ScopeEnable,SaveScope
  3254.     SF    ScopeEnable
  3255.     JSR    ShowStatusText
  3256.     BSR    StorePtrCol
  3257.     BSR    SetWaitPtrCol
  3258.     BSR    Wait_4000
  3259.     CMP    #1,CurrScreen
  3260.     BNE.S    aysskip
  3261.     TST.B    DisableAnalyzer
  3262.     BNE.S    aysskip
  3263.     ST     DisableAnalyzer
  3264.     BSR    ClearAnaHeights
  3265.     BSR    ClearRightArea
  3266. aysskip    LEA    SureBoxData,A1
  3267.     BSR    SwapBoxMem
  3268.     BSR    WaitForButtonUp
  3269.     BSR    Wait_4000
  3270.     CLR.B    RawKeyCode
  3271. surebuttoncheck
  3272.     BTST    #2,$DFF016
  3273.     BEQ.S    SureAnswerNo
  3274.     BSR    DoKeyBuffer
  3275.     MOVE.B    RawKeyCode,D0
  3276.     CMP.B    #21,D0 ; Pressed Y
  3277.     BEQ    SureAnswerYes
  3278.     CMP.B    #68,D0 ; Pressed Return
  3279.     BEQ.S    SureAnswerYes
  3280.     CMP.B    #54,D0 ; Pressed N
  3281.     BEQ.S    SureAnswerNo
  3282.     CMP.B    #69,D0 ; Pressed Esc
  3283.     BEQ.S    SureAnswerNo
  3284.     BTST    #6,$BFE001    ; Left Mousebutton
  3285.     BNE.S    surebuttoncheck
  3286.     MOVEM.W    MouseX,D0/D1
  3287.     CMP.W    #$AB,D0
  3288.     BLO.S    surebuttoncheck
  3289.     CMP.W    #$FC,D0
  3290.     BHI.S    surebuttoncheck
  3291.     CMP.W    #$48,D1
  3292.     BLO.S    surebuttoncheck
  3293.     CMP.W    #$52,D1
  3294.     BHI.S    surebuttoncheck
  3295.     CMP.W    #$C5,D0
  3296.     BLO.S    SureAnswerYes
  3297.     CMP.W    #$EA,D0
  3298.     BLO.S    surebuttoncheck
  3299. SureAnswerNo
  3300.     LEA    SureBoxData,A1
  3301.     BSR.S    SwapBoxMem
  3302.     JSR    ShowAllRight
  3303.     BSR    ClearAnaHeights
  3304.     MOVE.B    SaveDA,DisableAnalyzer
  3305.     MOVE.B    SaveScope,ScopeEnable
  3306.     BSR    ErrorRestoreCol
  3307.     BSR    WaitForButtonUp
  3308.     BSR    Wait_4000
  3309.     CLR.B    RawKeyCode
  3310.     MOVEQ    #-1,D0
  3311.     RTS
  3312.  
  3313. SureAnswerYes
  3314.     LEA    SureBoxData,A1
  3315.     BSR.S    SwapBoxMem
  3316.     JSR    ShowAllRight
  3317.     BSR    ClearAnaHeights
  3318.     MOVE.B    SaveDA,DisableAnalyzer
  3319.     MOVE.B    SaveScope,ScopeEnable
  3320.     BSR    RestorePtrCol
  3321.     BSR    WaitForButtonUp
  3322.     BSR    Wait_4000
  3323.     CLR.B    RawKeyCode
  3324.     MOVEQ    #0,D0
  3325.     RTS
  3326.  
  3327. SwapBoxMem
  3328.     LEA    SureBoxPos,A0
  3329.     MOVEQ    #38,D0
  3330. ssbmloop1
  3331.     MOVEQ    #12,D1
  3332. ssbmloop2
  3333.     MOVE.B    10240(A0),D2
  3334.     MOVE.B    546(A1),10240(A0)
  3335.     MOVE.B    D2,546(A1)
  3336.     MOVE.B    (A0),D2
  3337.     MOVE.B    (A1),(A0)+
  3338.     MOVE.B    D2,(A1)+
  3339.     DBRA    D1,ssbmloop2
  3340.     LEA    $001B(A0),A0
  3341.     ADDQ.L    #1,A1
  3342.     DBRA    D0,ssbmloop1
  3343.     MOVE.L    TextBplPtr,A0    ; Swap text...
  3344.     LEA    2100(A0),A0
  3345.     LEA    TextDataBuffer,A1
  3346.     MOVEQ    #38,D0
  3347. ssbmloop3
  3348.     MOVEQ    #12,D1
  3349. ssbmloop4
  3350.     MOVE.B    (A0),D2
  3351.     MOVE.B    (A1),(A0)+
  3352.     MOVE.B    D2,(A1)+
  3353.     DBRA    D1,ssbmloop4
  3354.     LEA    $001B(A0),A0
  3355.     ADDQ.L    #1,A1
  3356.     DBRA    D0,ssbmloop3
  3357.     RTS    
  3358.  
  3359. WaitForButtonUp
  3360.     BTST    #6,$BFE001    ; Check Left Mousebutton
  3361.     BEQ.S    WaitForButtonUp
  3362.     BTST    #2,$DFF016    ; Check Right Mousebutton
  3363.     BEQ.S    WaitForButtonUp
  3364.     MOVE.W    #$91,D0
  3365. WaitForVBlank
  3366.     MOVE.L    $DFF004,D1
  3367.     LSR.L    #8,D1
  3368.     AND.W    #$1FF,D1
  3369.     CMP.W    D1,D0
  3370.     BNE.S    WaitForVBlank
  3371.     RTS
  3372.  
  3373. ;---- Set Pointercolors ----
  3374.  
  3375. SetDeletePtrCol
  3376.     MOVE.L    A6,-(SP)
  3377.     MOVE.L    CopListColorPtr,A6
  3378.     MOVE.W    #$0AA,2(A6)
  3379.     MOVE.W    #$077,6(A6)
  3380.     MOVE.W    #$044,10(A6)
  3381.     MOVE.L    (SP)+,A6
  3382.     RTS    
  3383.  
  3384. SetNormalPtrCol
  3385.     MOVE.L    A6,-(SP)
  3386.     MOVE.L    CopListColorPtr,A6
  3387.     MOVE.W    #$AAA,2(A6)
  3388.     MOVE.W    #$777,6(A6)
  3389.     MOVE.W    #$444,10(A6)
  3390.     MOVE.L    (SP)+,A6
  3391.     RTS    
  3392.  
  3393. SetDiskPtrCol
  3394.     MOVE.L    A6,-(SP)
  3395.     MOVE.L    CopListColorPtr,A6
  3396.     MOVE.W    #$0A0,2(A6)
  3397.     MOVE.W    #$070,6(A6)
  3398.     MOVE.W    #$040,10(A6)
  3399.     MOVE.L    (SP)+,A6
  3400.     RTS    
  3401.  
  3402. SetPlayPtrCol
  3403.     MOVE.L    A6,-(SP)
  3404.     MOVE.L    CopListColorPtr,A6
  3405.     MOVE.W    #$AA0,2(A6)
  3406.     MOVE.W    #$770,6(A6)
  3407.     MOVE.W    #$440,10(A6)
  3408.     MOVE.L    (SP)+,A6
  3409.     RTS    
  3410.  
  3411. SetEditPtrCol
  3412.     MOVE.L    A6,-(SP)
  3413.     MOVE.L    CopListColorPtr,A6
  3414.     MOVE.W    #$05B,2(A6)
  3415.     MOVE.W    #$049,6(A6)
  3416.     MOVE.W    #$006,10(A6)
  3417.     MOVE.L    (SP)+,A6
  3418.     RTS    
  3419.  
  3420. SetWaitPtrCol
  3421.     MOVE.L    A6,-(SP)
  3422.     MOVE.L    CopListColorPtr,A6
  3423.     MOVE.W    #$A5A,2(A6)
  3424.     MOVE.W    #$727,6(A6)
  3425.     MOVE.W    #$404,10(A6)
  3426.     MOVE.L    (SP)+,A6
  3427.     RTS    
  3428.  
  3429. SetErrorPtrCol
  3430.     MOVE.L    A6,-(SP)
  3431.     MOVE.L    CopListColorPtr,A6
  3432.     MOVE.W    #$C00,2(A6)
  3433.     MOVE.W    #$900,6(A6)
  3434.     MOVE.W    #$700,10(A6)
  3435.     MOVE.L    (SP)+,A6
  3436.     MOVE.W    #1,UpdateFreeMem
  3437.     BSR    WaitALittle
  3438.     JSR    ShowAllRight
  3439.     BSR    SetNormalPtrCol
  3440.     MOVEQ    #0,D0
  3441.     RTS
  3442.  
  3443. WaitALittle
  3444.     MOVE.W    WaitTime(PC),D1
  3445. errorwaitloop
  3446.     BSR    Wait_4000
  3447.     DBRA    D1,errorwaitloop
  3448.     MOVE.W    #23,WaitTime
  3449.     RTS
  3450.  
  3451. WaitTime dc.w 23
  3452.  
  3453. StorePtrCol
  3454.     MOVE.L    A6,-(SP)
  3455.     MOVE.L    CopListColorPtr,A6
  3456.     MOVE.W    2(A6),PointerCol1Save
  3457.     MOVE.W    6(A6),PointerCol2Save
  3458.     MOVE.W    10(A6),PointerCol3Save
  3459.     MOVE.L    (SP)+,A6
  3460.     RTS
  3461.  
  3462. ErrorRestoreCol
  3463.     BSR    SetErrorPtrCol
  3464. RestorePtrCol
  3465.     MOVE.L    A6,-(SP)
  3466.     MOVE.W    #1,UpdateFreeMem
  3467.     MOVE.L    CopListColorPtr,A6
  3468.     MOVE.W    PointerCol1Save,2(A6)
  3469.     MOVE.W    PointerCol2Save,6(A6)
  3470.     MOVE.W    PointerCol3Save,10(A6)
  3471.     MOVE.L    (SP)+,A6
  3472.     RTS
  3473.  
  3474.  
  3475. ;---- Check special keys ----
  3476.  
  3477. CheckPlayKeys
  3478.     MOVE.B    RawKeyCode,D0
  3479.     CMP.B    #101,D0
  3480.     BEQ    PlaySong
  3481.     CMP.B    #103,D0
  3482.     BEQ    PlayPattern
  3483.     CMP.B    #64,D0
  3484.     BNE.S    cpkskip
  3485.     TST.L    RunMode    
  3486.     BNE    StopIt
  3487.     TST.L    EditMode
  3488.     BNE    StopIt    
  3489.     BRA    Edit
  3490. cpkskip    CMP.B    #97,D0
  3491.     BEQ    RecordPattern
  3492.     CMP.B    #69,D0
  3493.     BEQ    EscPressed
  3494.     CMP.B    #66,D0
  3495.     BEQ    TabulateCursor
  3496.     CMP.B    #127,D0
  3497.     BEQ    GotoCLI
  3498.     CMP.B    #48,D0
  3499.     BEQ    TurnOffVoices
  3500.     CMP.B    #60,D0
  3501.     BEQ    KillSample
  3502.     CMP.B    #13,D0
  3503.     BEQ    togglepnote
  3504.  
  3505.     CMP.B    #67,D0
  3506.     BEQ.S    HigherInstr
  3507.     CMP.B    #67+128,D0
  3508.     BEQ.S    LowerInstr
  3509.     MOVE.W    HiLowInstr,D1
  3510.     LEA    kpinstable(PC),A0
  3511.     MOVEQ    #0,D2
  3512. kpinsloop
  3513.     CMP.B    (A0,D2.W),D0
  3514.     BEQ.S    kpinsfound
  3515.     ADDQ.W    #1,D2
  3516.     CMP.W    #16,D2
  3517.     BLO.S    kpinsloop
  3518.     RTS
  3519.  
  3520. kpinsfound
  3521.     ADD.W    D2,D1
  3522.     BEQ.S    insnull
  3523.     BRA.S    redrsa2
  3524.  
  3525. LowerInstr
  3526.     CLR.W    HiLowInstr
  3527.     RTS
  3528. HigherInstr
  3529.     MOVE.W    #16,HiLowInstr
  3530.     MOVE.W    #16,D1
  3531.     BRA.S    redrsa2
  3532.  
  3533. redrsa3    MOVE.W    D1,InsNum
  3534. redrsam    CLR.B    RawKeyCode
  3535.     CLR.L    SavSamInf
  3536.     JSR    ShowSampleInfo
  3537.     JMP    RedrawSample
  3538.  
  3539. insnull    TST.W    InsNum
  3540.     BEQ.S    insnul2
  3541.     MOVE.W    InsNum,LastInsNum
  3542.     CLR.W    InsNum
  3543.     MOVEQ    #0,D1
  3544.     BRA.S    redrsa2
  3545.  
  3546. insnul2    JMP    ShowSampleInfo
  3547.  
  3548. kpinstable
  3549.     dc.b 15,90,91,92
  3550.     dc.b 93,61,62,63,74
  3551.     dc.b 45,46,47,94,29,30
  3552.     dc.b 31
  3553.  
  3554. redrsa2    TST.B    pnoteflag
  3555.     BEQ.S    redrsa3
  3556.     CLR.B    RawKeyCode
  3557.     TST.W    AltKeyStatus
  3558.     BNE.S    setpnote
  3559.     MOVE.W    D1,InsNum
  3560.     JSR    ShowSampleInfo
  3561.     MOVE.W    InsNum,D0
  3562.     ADD.W    D0,D0
  3563.     MOVE.W    pnotetable(PC,D0.W),D0
  3564.     MOVEQ    #-1,D2
  3565.     BSR    playtheinstr
  3566.     JMP    RedrawSample
  3567.  
  3568. pnotetable
  3569.     dc.w 24,24,24,24,24,24,24,24,24,24
  3570.     dc.w 24,24,24,24,24,24,24,24,24,24
  3571.     dc.w 24,24,24,24,24,24,24,24,24,24
  3572.     dc.w 24,24
  3573.  
  3574. setpnote
  3575.     ADD.W    D1,D1
  3576.     LEA    pnotetable(PC,D1.W),A0
  3577.     MOVE.L    A0,SplitAddress
  3578.     MOVE.W    #4,SamNoteType
  3579.     LEA    selnotetext(PC),A0
  3580.     JMP    ShowStatusText
  3581.  
  3582. selnotetext    dc.b "select note",0
  3583.  
  3584. togglepnote
  3585.     CLR.B    RawKeyCode
  3586.     MOVEQ    #0,D0
  3587.     MOVE.B    pnoteflag,D0
  3588.     ADDQ.B    #1,D0
  3589.     CMP.B    #3,D0
  3590.     BLO.S    tpnskp
  3591.     MOVEQ    #0,D0
  3592. tpnskp    MOVE.B    D0,pnoteflag
  3593.     LEA    pnotechar(PC,D0.W),A0
  3594.     MOVEQ    #1,D0
  3595.     MOVE.W    #5159,D1
  3596.     JMP    ShowText3
  3597.  
  3598. pnotechar    dc.b 32,128,129
  3599. pnoteflag    dc.b 0
  3600.  
  3601. ;---- Check transpose keys ----
  3602.  
  3603. CheckTransKeys
  3604.     TST.W    LeftAmigaStatus
  3605.     BEQ    Return1
  3606.     MOVE.W    PattCurPos,D0
  3607.     BSR    GetPositionPtr
  3608.     MOVE.B    RawKeyCode,D1
  3609.     CLR.B    RawKeyCode
  3610.     MOVE.B    SampleAllFlag,-(SP)
  3611.     BSR.S    ctksub
  3612.     MOVE.B    (SP)+,SampleAllFlag
  3613.     RTS
  3614.  
  3615. ctksub    MOVEQ    #0,D0
  3616.     CLR.B    SampleAllFlag
  3617.     CMP.B    #1,D1
  3618.     BEQ    NoteUp
  3619.     CMP.B    #16,D1
  3620.     BEQ    NoteDown
  3621.     CMP.B    #32,D1
  3622.     BEQ    OctaveUp
  3623.     CMP.B    #49,D1
  3624.     BEQ    OctaveDown
  3625.  
  3626.     MOVE.W    #300,D0
  3627.     CMP.B    #2,D1
  3628.     BEQ    NoteUp
  3629.     CMP.B    #17,D1
  3630.     BEQ    NoteDown
  3631.     CMP.B    #33,D1
  3632.     BEQ    OctaveUp
  3633.     CMP.B    #50,D1
  3634.     BEQ    OctaveDown
  3635.  
  3636.     MOVEQ    #0,D0
  3637.     MOVE.B    #1,SampleAllFlag
  3638.     CMP.B    #3,D1
  3639.     BEQ    NoteUp
  3640.     CMP.B    #18,D1
  3641.     BEQ    NoteDown
  3642.     CMP.B    #34,D1
  3643.     BEQ    OctaveUp
  3644.     CMP.B    #51,D1
  3645.     BEQ    OctaveDown
  3646.     
  3647.     MOVE.W    #300,D0
  3648.     CMP.B    #4,D1
  3649.     BEQ    NoteUp
  3650.     CMP.B    #19,D1
  3651.     BEQ    NoteDown
  3652.     CMP.B    #35,D1
  3653.     BEQ    OctaveUp
  3654.     CMP.B    #52,D1
  3655.     BEQ    OctaveDown
  3656.     RTS
  3657.  
  3658. ;---- Check control keys ----
  3659.  
  3660. CheckCtrlKeys
  3661.     TST.W    CtrlKeyStatus
  3662.     BEQ    Return1
  3663.     MOVEQ    #0,D0
  3664.     MOVE.B    RawKeyCode,D0
  3665.     CMP.B    #35,D0 ; F
  3666.     BEQ    ToggleFilter
  3667.     CMP.B    #33,D0 ; S
  3668.     BEQ    ToggleSplit
  3669.     CMP.B    #55,D0 ; M
  3670.     BEQ    ToggleMultiMode
  3671.     CMP.B    #16,D0 ; Q
  3672.     BEQ    UnmuteAll
  3673.     CMP.B    #32,D0 ; A
  3674.     BEQ    ToggleMute
  3675.     CMP.B    #49,D0 ; Z
  3676.     BEQ    RestoreEffects
  3677.     CMP.B    #19,D0 ; R
  3678.     BEQ    RestoreFKeyPos
  3679.     CMP.B    #20,D0 ; T
  3680.     BEQ    SwapTrack
  3681.  
  3682.     CMP.B    #53,D0 ; B
  3683.     BEQ    BeginBlock
  3684.     CMP.B    #51,D0 ; C
  3685.     BEQ    CopyBlock
  3686.     CMP.B    #50,D0 ; X
  3687.     BEQ    CutBlock
  3688.     CMP.B    #34,D0 ; D
  3689.     BEQ    DeleteBlock
  3690.     CMP.B    #25,D0 ; P
  3691.     BEQ    PasteBlock
  3692.     CMP.B    #23,D0 ; I
  3693.     BEQ    InsertBlock
  3694.     CMP.B    #38,D0 ; J
  3695.     BEQ    JoinPasteBlock
  3696.     CMP.B    #54,D0 ; N
  3697.     BEQ    Re_MarkBlock
  3698.     CMP.B    #21,D0 ; Y
  3699.     BEQ    BackwardsBlock
  3700.     CMP.B    #17,D0 ; W
  3701.     BEQ    PolyphonizeBlock
  3702.  
  3703.     CMP.B    #18,D0 ; E
  3704.     BEQ    ExpandTrack
  3705.     CMP.B    #24,D0 ; O
  3706.     BEQ    ContractTrack
  3707.     CMP.B    #37,D0 ; H
  3708.     BEQ    TransBlockUp
  3709.     CMP.B    #40,D0 ; L
  3710.     BEQ    TransBlockDown
  3711.     CMP.B    #39,D0 ; K
  3712.     BEQ    KillToEndOfTrack
  3713.     CMP.B    #22,D0 ; U
  3714.     BEQ    UndoLastChange
  3715.  
  3716.     CMP.B    #68,D0 ; CR
  3717.     BEQ    InsCmdTrack
  3718.     CMP.B    #65,D0 ; Del
  3719.     BEQ    DelCmdTrack
  3720.     CMP.B    #36,D0 ; G
  3721.     BEQ    BoostAll
  3722.     CMP.B    #52,D0 ; V
  3723.     BEQ    FilterAll
  3724.  
  3725.     CMP.B    #1,D0
  3726.     BLO    Return1
  3727.     CMP.B    #10,D0
  3728.     BHI    Return1
  3729.     BNE.S    cckskip
  3730.     MOVEQ    #0,D0
  3731. cckskip    MOVE.W    D0,EditMoveAdd
  3732.     CLR.B    RawKeyCode
  3733.     ADD.B    #'0',D0
  3734.     LEA    ematext(PC),A0
  3735.     MOVE.B    D0,11(A0)
  3736.     JSR    ShowStatusText
  3737.     MOVE.W    #10,WaitTime
  3738.     BSR    WaitALittle
  3739.     JMP    ShowAllRight
  3740.  
  3741. ematext    dc.b "editskip = 0",0,0
  3742.  
  3743. ;---- Check alt keys ----
  3744.  
  3745. CheckAltKeys
  3746.     TST.W    AltKeyStatus
  3747.     BEQ    Return1
  3748.     MOVEQ    #0,D0
  3749.     MOVE.B    RawKeyCode,D0
  3750.     CMP.B    #49,D0 ; Z
  3751.     BEQ    ToggleCh1
  3752.     CMP.B    #50,D0 ; X
  3753.     BEQ    ToggleCh2
  3754.     CMP.B    #51,D0 ; C
  3755.     BEQ    ToggleCh3
  3756.     CMP.B    #52,D0 ; V
  3757.     BEQ    ToggleCh4
  3758.     CMP.B    #53,D0 ; B
  3759.     BEQ    Boost
  3760.     CMP.B    #35,D0 ; F
  3761.     BEQ    Filter
  3762.     CMP.B    #20,D0 ; T
  3763.     BEQ.S    xTuningTone
  3764.     CMP.B    #33,D0 ; S
  3765.     BEQ.S    xSamplerScreen
  3766.     CMP.B    #19,D0 ; R
  3767.     BEQ.S    xResample
  3768.     CMP.B    #18,D0 ; E
  3769.     BEQ    DoEditOp
  3770.     CMP.B    #23,D0 ; I
  3771.     BEQ.S    AutoInsert
  3772.     CMP.B    #34,D0 ; D
  3773.     BEQ    DiskOp
  3774.     CMP.B    #39,D0 ; K
  3775.     BEQ    KillInstrTrack
  3776. ;    CMP.B    #17,D0 ; W
  3777. ;    BEQ.S    WaitForNote
  3778.     CMP.B    #32,D0 ; A
  3779.     BEQ.S    xSampler
  3780.     CMP.B    #16,D0 ; Q
  3781.     BEQ    ChkQuit
  3782.     CMP.B    #21,D0 ; Y
  3783.     BEQ    SaveAllSamples
  3784.  
  3785. ;    CMP.B    #24,D0 ; O
  3786. ;    CMP.B    #55,D0 ; M
  3787. ;    CMP.B    #25,D0 ; P
  3788. ;    CMP.B    #38,D0 ; J
  3789. ;    CMP.B    #54,D0 ; N
  3790. ;    CMP.B    #37,D0 ; H
  3791. ;    CMP.B    #40,D0 ; L
  3792. ;    CMP.B    #22,D0 ; U
  3793. ;    CMP.B    #36,D0 ; G
  3794.     RTS
  3795.  
  3796. xTuningTone    JMP    TuningTone
  3797. xSamplerScreen    JMP    SamplerScreen
  3798. xResample    JMP    Resample
  3799. xSampler    JMP    Sampler
  3800.  
  3801. AutoInsert
  3802.     CLR.B    RawKeyCode
  3803.     EOR.B    #1,AutoInsFlag
  3804. ShowAutoInsert
  3805.     CMP.W    #4,CurrScreen
  3806.     BEQ    Return1
  3807.     MOVE.B    #' ',D0
  3808.     TST.B    AutoInsFlag
  3809.     BEQ.S    auins2
  3810.     MOVE.B    #'I',D0
  3811. auins2    MOVE.B    D0,AutoInsText
  3812.     MOVE.W    #4561,D1
  3813.     MOVEQ    #1,D0
  3814.     LEA    AutoInsText(PC),A0
  3815.     JMP    ShowText3
  3816.  
  3817. AutoInsText    dc.b 0
  3818. AutoInsFlag    dc.b 0
  3819.  
  3820. SaveAllSamples
  3821.     LEA    SaveAllSamplesText,A0
  3822.     BSR    AreYouSure
  3823.     BNE    SetErrorPtrCol
  3824.     MOVE.W    InsNum,SaveInstr
  3825.     MOVE.W    #1,InsNum
  3826. .loop    JSR    ShowSampleInfo
  3827.     BSR    dosavesample
  3828.     ADDQ.W    #1,InsNum
  3829.     CMP.W    #32,InsNum
  3830.     BLO.S    .loop
  3831.     MOVE.W    SaveInstr,InsNum
  3832.     JMP    ShowSampleInfo
  3833.  
  3834. SaveAllSamplesText
  3835.     dc.b    "save all samples?",0
  3836.     even
  3837.  
  3838. ;---- Jump between channels ----
  3839.  
  3840. TabulateCursor
  3841.     CLR.B    RawKeyCode
  3842.     TST.W    ShiftKeyStatus
  3843.     BNE.S    TabCurRight
  3844.     MOVE.W    PattCurPos,D0
  3845.     DIVU    #6,D0
  3846.     ADDQ.W    #1,D0
  3847.     CMP.W    #4,D0
  3848.     BNE.S    tacskip
  3849.     MOVEQ    #0,D0
  3850. tacskip    MULU    #6,D0
  3851.     MOVE.W    D0,PattCurPos
  3852.     BRA    UpdateCursorPos
  3853.  
  3854. TabCurRight
  3855.     MOVE.W    PattCurPos,D0
  3856.     ADDQ.W    #5,D0
  3857.     DIVU    #6,D0
  3858.     SUBQ.W    #1,D0
  3859.     BPL.S    tacskip
  3860.     MOVEQ    #3,D0
  3861.     BRA.S    tacskip
  3862.  
  3863. ;---- Escape was pressed ----
  3864.  
  3865. EscPressed
  3866.     CLR.B    RawKeyCode
  3867.     CLR.B    SaveKey
  3868.     MOVE.W    CurrScreen,D0
  3869.     CMP.W    #2,D0
  3870.     BLO.S    BotExit
  3871. TopExit    MOVE.W    CurrScreen,D0
  3872.     CMP.W    #2,D0
  3873.     BEQ    ExitHelpScreen
  3874.     CMP.W    #3,D0
  3875.     BEQ    ExitFromDir
  3876.     CMP.W    #4,D0
  3877.     BEQ.S    pedexit
  3878.     CMP.W    #5,D0
  3879.     BEQ    ExitSetup
  3880.     CMP.W    #6,D0
  3881.     BEQ.S    plstexit
  3882.     CMP.W    #7,D0
  3883.     BEQ    ExitSetup
  3884.     RTS
  3885.  
  3886. BotExit    TST.W    SamScrEnable
  3887.     BNE.S    samplerexit
  3888.     TST.W    BlockMarkFlag
  3889.     BNE    blkunma
  3890.     CMP.W    #1,CurrScreen
  3891.     BNE    Return1
  3892.     TST.B    EdEnable
  3893.     BNE    ExitEditOp
  3894.     RTS
  3895.  
  3896. samplerexit
  3897.      JMP    ExitFromSam
  3898. pedexit     JMP    PED_Exit
  3899. plstexit JMP    ExitPLST
  3900.  
  3901. GotoCLI    CLR.B    RawKeyCode
  3902.     CLR.B    SaveKey
  3903.     TST.L    RunMode
  3904.     BNE.S    cliskp1
  3905.     BSR    StopIt
  3906.     BSR    ResetMusicInt
  3907. cliskp1    BSR    ResetVBInt
  3908.     BSR    ResetInputHandler
  3909.     BSR    ResetAutoReq
  3910.     BSR    ResetCopList
  3911.     MOVE.L    ExtCmdAddress,D1
  3912.     BEQ.S    gcliskp
  3913.     CLR.L    ExtCmdAddress
  3914.     MOVE.L    ExtCmdWindow,D2
  3915.     MOVEQ    #0,D3
  3916.     MOVE.L    DOSBase,A6
  3917.     JSR    LVOExecute(A6)
  3918. gcliskp    SUB.L    A0,A0
  3919.     LEA    BackToProText(PC),A1
  3920.     LEA    OKGadgetText(PC),A2
  3921.     MOVE.L    A2,A3
  3922.     MOVEQ    #0,D0
  3923.     MOVEQ    #0,D1
  3924.     MOVE.W    #196,D2
  3925.     MOVEQ    #50,D3
  3926.     MOVE.L    IntuitionBase,A6
  3927.     JSR    LVOAutoRequest(A6)
  3928.     ADDQ.B    #1,LastRawkey
  3929.     TST.L    RunMode
  3930.     BNE.S    cliskp2
  3931.     BSR    SetMusicInt
  3932. cliskp2    BSR    SetVBInt
  3933.     BSR    SetInputHandler
  3934.     BSR    SetAutoReq
  3935.     BRA    SetCopList
  3936.  
  3937. BackToProText
  3938.     dc.b 0,1,1,0
  3939.     dc.w 14,6
  3940.     dc.l 0,btptext,0
  3941. btptext dc.b 'Back to Protracker',0,0
  3942.  
  3943. OKGadgetText
  3944.     dc.b 0,1,1,0
  3945.     dc.w 6,3
  3946.     dc.l 0,okgtext,0
  3947. okgtext dc.b 'OK',0,0
  3948.  
  3949. ;---- Check Help Key ----
  3950.  
  3951. HelpSelectText    dc.b    '* help selected *',0
  3952. PLSTSelectText    dc.b    '* plst selected *',0
  3953. PLSTHelpFlag    dc.b    0,0 ; free 0
  3954.  
  3955. CheckHelpKey
  3956.     CMP.B    #95,RawKeyCode    ; Help Key pressed ?
  3957.     BNE    Return1
  3958.     CLR.B    RawKeyCode
  3959.     TST.W    ShiftKeyStatus
  3960.     BEQ.S    realhlp
  3961.     LEA    HelpSelectText,A0
  3962.     EOR.B    #1,PLSTHelpFlag
  3963.     BEQ.S    chksel
  3964.     LEA    PLSTSelectText,A0
  3965. chksel    BSR    ShowStatusText
  3966.     BSR    WaitALittle
  3967.     BRA    ShowAllRight
  3968.  
  3969. gtoPLST    JMP    PLST
  3970.  
  3971. realhlp    TST.B    PLSTHelpFlag
  3972.     BNE.S    gtoPLST
  3973.     CMP.W    #2,CurrScreen
  3974.     BEQ    ExitHelpScreen
  3975.     BSR    TopExit
  3976.     MOVE.W    CurrScreen,SaveCurrScreen
  3977.     SF    ScopeEnable
  3978.     ST     DisableAnalyzer
  3979.     ST    NoSampleInfo
  3980.     BSR    ClearAnalyzerColors
  3981.     BSR    SwapHelpScreen
  3982.     BEQ    exithlp
  3983.     BSR    Clear100Lines
  3984.     TST.L    HelpTextIndex+4
  3985.     BNE.S    chkskip
  3986.     BSR    GetHelpIndex
  3987. chkskip    MOVE.L    #HelpFileName,D1
  3988.     MOVE.L    #1005,D2
  3989.     MOVE.L    DOSBase,A6
  3990.     JSR    LVOOpen(A6)
  3991.     MOVE.L    D0,FileHandle
  3992.     BNE    ShowHelpPage
  3993.     LEA    PTPath,A0
  3994.     BSR    CopyPath
  3995.     LEA    HelpFileName(PC),A0
  3996.     MOVEQ    #7,D0
  3997. hefilop    MOVE.B    (A0)+,(A1)+
  3998.     DBRA    D0,hefilop
  3999.     MOVE.L    #FileName,D1
  4000.     MOVE.L    #1005,D2
  4001.     MOVE.L    DOSBase,A6
  4002.     JSR    LVOOpen(A6)
  4003.     MOVE.L    D0,FileHandle
  4004.     BEQ    HelpFileError
  4005.     BRA.S    ShowHelpPage
  4006.  
  4007. ExitHelpScreen
  4008.     MOVE.L    FileHandle,D1
  4009.     BEQ.S    ehsskip
  4010.     MOVE.L    DOSBase,A6
  4011.     JSR    LVOClose(A6)
  4012. ehsskip    BSR    Clear100Lines
  4013.     BSR.S    SwapHelpScreen
  4014. exithlp    MOVE.W    SaveCurrScreen,CurrScreen
  4015.      BRA    DisplayMainAll
  4016.  
  4017. SwapHelpScreen
  4018.     MOVE.L    DecompMemPtr,D0
  4019.     BEQ.S    shelps2
  4020.     MOVE.L    D0,A1
  4021.     BSR    ssets3
  4022.     BRA    FreeDecompMem
  4023. shelps2    LEA    HelpScreenData,A0
  4024.     MOVE.L    #HelpScreenSize,D0
  4025.     BSR    Decompact
  4026.     BEQ    Return1
  4027.     BRA    ssets3
  4028.  
  4029. ShowHelpPage
  4030.     MOVE.W    #2,CurrScreen
  4031.     MOVE.W    HelpPage,D0
  4032.     AND.W    #$00FF,D0
  4033.     LSL.W    #2,D0
  4034.     LEA    HelpTextIndex,A0
  4035.     MOVE.L    FileHandle,D1
  4036.     BEQ    Return1
  4037.     MOVE.L    (A0,D0.W),D2
  4038.     ADD.L    #1024,D2
  4039.     MOVEQ    #-1,D3
  4040.     MOVE.L    DOSBase,A6
  4041.     JSR    LVOSeek(A6)
  4042.     MOVE.L    FileHandle,D1
  4043.     MOVE.L    #HelpTextData,D2
  4044.     MOVE.L    #656,D3
  4045.     JSR    LVORead(A6)
  4046.     BSR    Clear100Lines
  4047.     LEA    HelpTextData+16,A6
  4048.     MOVEQ    #120,D6
  4049.     MOVEQ    #15,D7
  4050. shploop    MOVEQ    #0,D0
  4051.     MOVE.L    A6,A1
  4052. shplop2    CMP.B    #10,(A1)+
  4053.     BEQ.S    ShowHelpLine
  4054.     TST.B    -1(A1)
  4055.     BEQ.S    ShowHelpLine
  4056.     ADDQ.W    #1,D0
  4057.     BRA.S    shplop2
  4058. ShowHelpLine
  4059.     MOVE.L    A6,ShowTextPtr
  4060.     MOVE.L    A1,A6
  4061.     MOVE.W    D6,TextOffset
  4062.     MOVE.W    D0,TextLength
  4063.     BEQ.S    shlskip
  4064.     JSR    ShowText
  4065. shlskip    ADD.W    #240,D6
  4066.     DBRA    D7,shploop
  4067.     BSR    Wait_4000
  4068.     BRA    Wait_4000
  4069.  
  4070. HelpPage    dc.w    1
  4071.  
  4072. HelpUp    LEA    HelpTextData+7,A0
  4073.     BRA.S    HelpMove
  4074. HelpDown
  4075.     LEA    HelpTextData+10,A0
  4076.     BRA.S    HelpMove
  4077. HelpLeft
  4078.     LEA    HelpTextData+4,A0
  4079.     BRA.S    HelpMove
  4080. HelpRight
  4081.     LEA    HelpTextData+13,A0
  4082. HelpMove
  4083.     CLR.B    RawKeyCode
  4084.     MOVEQ    #0,D0
  4085.     JSR    HexToInteger2
  4086.     TST.W    D0
  4087.     BEQ    Return1
  4088.     AND.W    #$00FF,D0
  4089.     MOVE.W    D0,HelpPage
  4090.     BRA    ShowHelpPage
  4091.  
  4092. GetHelpIndex
  4093.     MOVE.L    LaHeTx,D0
  4094.     CMP.L    HelpTextIndex,D0
  4095.     BEQ    Return1
  4096.     MOVE.L    #HelpFileName,D1
  4097.     MOVE.L    #1005,D2
  4098.     MOVE.L    DOSBase,A6
  4099.     JSR    LVOOpen(A6)
  4100.     MOVE.L    D0,FileHandle
  4101.     BNE.S    gehein
  4102.     LEA    PTPath,A0
  4103.     BSR    CopyPath
  4104.     LEA    HelpFileName(PC),A0
  4105.     MOVEQ    #7,D0
  4106. hefilp2    MOVE.B    (A0)+,(A1)+
  4107.     DBRA    D0,hefilp2
  4108.     MOVE.L    #FileName,D1
  4109.     MOVE.L    #1005,D2
  4110.     MOVE.L    DOSBase,A6
  4111.     JSR    LVOOpen(A6)
  4112.     MOVE.L    D0,FileHandle
  4113.     BEQ.S    HelpFileError
  4114. gehein    MOVE.L    D0,D1
  4115.     MOVE.L    #HelpTextIndex,D2
  4116.     MOVE.L    #256*4,D3
  4117.     JSR    LVORead(A6)
  4118.     MOVE.L    FileHandle,D1
  4119.     JSR    LVOClose(A6)
  4120.     MOVE.L    HelpTextIndex,LaHeTx
  4121.     RTS
  4122.  
  4123. HelpFileError
  4124.     MOVE.W    #2,CurrScreen
  4125.     LEA    NoHelpText(PC),A0
  4126.     MOVE.W    #1887,D1
  4127.     MOVEQ    #24,D0
  4128.     JMP    ShowText3
  4129.  
  4130. NoHelpText    dc.b 'Unable to open helpfile!'
  4131. HelpFileName    dc.b 'PT.help',0
  4132.  
  4133.  
  4134. ;---- Check Function Keys F6-F10 ----
  4135.  
  4136. CheckF6_F10
  4137.     CMP.B    #85,RawKeyCode
  4138.     BNE.S    CheckF7
  4139.     CLR.B    RawKeyCode
  4140.     TST.W    ShiftKeyStatus
  4141.     BEQ.S    cf6skip
  4142.     MOVE.W    ScrPattPos,F6pos
  4143. ShowPosSetText
  4144.     LEA    PosSetText,A0
  4145.     BSR    ShowStatusText
  4146.     MOVEQ    #8,D2
  4147. spsloop    BSR    Wait_4000
  4148.     DBRA    D2,spsloop
  4149.     BRA    ShowAllRight    
  4150. cf6skip    MOVE.W    F6pos,D0
  4151. chkalt    TST.W    AltKeyStatus
  4152.     BNE    PattFrom
  4153.     TST.W    CtrlKeyStatus
  4154.     BNE    RecordFrom
  4155.     TST.W    LeftAmigaStatus
  4156.     BNE    SongFrom
  4157.     TST.W    RunMode
  4158.     BNE    Return1
  4159.     MOVE.W    D0,ScrPattPos
  4160.     BRA    SetScrPatternPos
  4161.  
  4162. CheckF7    CMP.B    #86,RawKeyCode
  4163.     BNE.S    CheckF8
  4164.     CLR.B    RawKeyCode
  4165.     TST.W    ShiftKeyStatus
  4166.     BEQ.S    cf7skip
  4167.     MOVE.W    ScrPattPos,F7pos
  4168.     BRA.S    ShowPosSetText    
  4169. cf7skip    MOVE.W    F7pos,D0
  4170.     BRA.S    chkalt
  4171.  
  4172. CheckF8    CMP.B    #87,RawKeyCode
  4173.     BNE.S    CheckF9
  4174.     CLR.B    RawKeyCode
  4175.     TST.W    ShiftKeyStatus
  4176.     BEQ.S    cf8skip
  4177.     MOVE.W    ScrPattPos,F8pos
  4178.     BRA    ShowPosSetText    
  4179. cf8skip    MOVE.W    F8pos,D0
  4180.     BRA    chkalt
  4181.  
  4182. CheckF9    CMP.B    #88,RawKeyCode
  4183.     BNE.S    CheckF10
  4184.     CLR.B    RawKeyCode
  4185.     TST.W    ShiftKeyStatus
  4186.     BEQ.S    cf9skip
  4187.     MOVE.W    ScrPattPos,F9pos
  4188.     BRA    ShowPosSetText
  4189. cf9skip    MOVE.W    F9pos,D0
  4190.     BRA    chkalt
  4191.  
  4192. CheckF10
  4193.     CMP.B    #89,RawKeyCode
  4194.     BNE    Return1
  4195.     CLR.B    RawKeyCode
  4196.     TST.W    ShiftKeyStatus
  4197.     BEQ.S    cf10skip
  4198.     MOVE.W    ScrPattPos,F10pos
  4199.     BRA    ShowPosSetText    
  4200. cf10skip
  4201.     MOVE.W    F10pos,D0
  4202.     BRA    chkalt
  4203.  
  4204. F6pos    dc.w  0
  4205. F7pos    dc.w 16
  4206. F8pos    dc.w 32
  4207. F9pos    dc.w 48
  4208. F10pos    dc.w 63
  4209.  
  4210. ;---- Check Function Keys F3-F5 ----
  4211.  
  4212. CheckF3_F5
  4213.     MOVEQ    #0,D0
  4214.     MOVE.L    D0,A0
  4215.     TST.W    ShiftKeyStatus
  4216.     BNE    CCP4
  4217.     TST.W    CtrlKeyStatus
  4218.     BNE    CCP4
  4219.     TST.W    AltKeyStatus
  4220.     BNE    CutCopPas
  4221.     CMP.B    #68,RawKeyCode
  4222.     BEQ.S    StepPlayForward
  4223.     CMP.B    #65,RawKeyCode
  4224.     BEQ.S    StepPlayBackward
  4225.     TST.W    SamScrEnable
  4226.     BEQ    Return1
  4227.     CMP.B    #82,RawKeyCode
  4228.     BEQ.S    xSamCut
  4229.     CMP.B    #83,RawKeyCode
  4230.     BEQ.S    xSamCop
  4231.     CMP.B    #84,RawKeyCode
  4232.     BEQ.S    xSamPas
  4233.     RTS
  4234.  
  4235. xSamCut    JMP    SamCut
  4236. xSamCop    JMP    SamCopy
  4237. xSamPas    JMP    SamPaste
  4238.  
  4239. StepPlayForward
  4240.     MOVE.W    #1,StepPlayEnable
  4241.     BSR    DoStopIt
  4242.     MOVE.W    ScrPattPos,D0
  4243.     BRA    pafr1
  4244.  
  4245. StepPlayBackward
  4246.     MOVE.W    #1,StepPlayEnable
  4247.     BSR    DoStopIt
  4248.     MOVE.W    ScrPattPos,D0
  4249.     SUBQ.W    #1,D0
  4250.     AND.W    #63,D0
  4251.     BRA    pafr1
  4252.  
  4253. StepPlayEnable    dc.w    0
  4254.  
  4255. CCP4    MOVEQ    #0,D0
  4256.     MOVE.W    PattCurPos,D0
  4257.     DIVU    #6,D0
  4258.     AND.L    #3,D0
  4259.     LSL.L    #2,D0
  4260.     MOVE.L    D0,A0
  4261. CutCopPas
  4262.     ADD.L    SongDataPtr,A0
  4263.     LEA    sd_patterndata(A0),A0
  4264.     MOVE.L    PatternNumber,D0
  4265.     LSL.L    #8,D0
  4266.     LSL.L    #2,D0
  4267.     ADD.L    D0,A0
  4268.     TST.W    AltKeyStatus
  4269.     BNE.S    CutCopPasPatt
  4270.     TST.W    CtrlKeyStatus
  4271.     BNE.S    CutCopPasCmds
  4272. CutCopPasTrack    
  4273.     CMP.B    #82,RawKeyCode
  4274.     BEQ    CutTrack
  4275.     CMP.B    #83,RawKeyCode
  4276.     BEQ    CopyTrack
  4277.     CMP.B    #84,RawKeyCode
  4278.     BEQ    PasteTrack
  4279.     CMP.B    #68,RawKeyCode
  4280.     BEQ    InsNoteTrack
  4281.     CMP.B    #65,RawKeyCode
  4282.     BEQ    DelNoteTrack
  4283.     RTS
  4284.  
  4285. CutCopPasPatt
  4286.     CMP.B    #82,RawKeyCode
  4287.     BEQ.S    CutPattern
  4288.     CMP.B    #83,RawKeyCode
  4289.     BEQ.S    CopyPattern
  4290.     CMP.B    #84,RawKeyCode
  4291.     BEQ    PastePattern
  4292.     CMP.B    #68,RawKeyCode
  4293.     BEQ    InsNotePattern
  4294.     CMP.B    #65,RawKeyCode
  4295.     BEQ    DelNotePattern
  4296.     RTS
  4297.  
  4298. CutCopPasCmds    
  4299.     CMP.B    #82,RawKeyCode
  4300.     BEQ    CutCmds
  4301.     CMP.B    #83,RawKeyCode
  4302.     BEQ    CopyCmds
  4303.     CMP.B    #84,RawKeyCode
  4304.     BEQ    PasteCmds
  4305.     RTS
  4306.  
  4307. CutPattern
  4308.     BSR    SaveUndo
  4309.     LEA    PatternBuffer,A1
  4310.     MOVE.W    #255,D0
  4311.     MOVEQ    #0,D1
  4312. cupaloop
  4313.     MOVE.L    (A0),(A1)+
  4314.     MOVE.L    D1,(A0)+
  4315.     DBRA    D0,cupaloop
  4316.     CLR.B    RawKeyCode
  4317.     BRA    RedrawPattern
  4318.  
  4319. CopyPattern
  4320.     LEA    PatternBuffer,A1
  4321.     MOVE.W    #255,D0
  4322. copaloop
  4323.     MOVE.L    (A0)+,(A1)+
  4324.     DBRA    D0,copaloop
  4325.     CLR.B    RawKeyCode
  4326.     RTS    
  4327.  
  4328. PastePattern
  4329.     BSR    SaveUndo
  4330.     LEA    PatternBuffer,A1
  4331.     MOVE.W    #255,D0
  4332. papaloop
  4333.     MOVE.L    (A1)+,(A0)+
  4334.     DBRA    D0,papaloop
  4335.     CLR.B    RawKeyCode
  4336.     BRA    RedrawPattern
  4337.  
  4338.  
  4339. CutTrack
  4340.     BSR    SaveUndo
  4341.     LEA    TrackBuffer,A1
  4342.     MOVEQ    #63,D0
  4343.     MOVEQ    #0,D1
  4344. cutrloop
  4345.     MOVE.L    (A0),(A1)+
  4346.     MOVE.L    D1,(A0)
  4347.     LEA    16(A0),A0
  4348.     DBRA    D0,cutrloop
  4349.     CLR.B    RawKeyCode
  4350.     BRA    RedrawPattern
  4351.  
  4352. CopyTrack
  4353.     LEA    TrackBuffer,A1
  4354.     MOVEQ    #63,D0
  4355. cotrloop
  4356.     MOVE.L    (A0),(A1)+
  4357.     LEA    16(A0),A0
  4358.     DBRA    D0,cotrloop
  4359.     CLR.B    RawKeyCode
  4360.     RTS
  4361.  
  4362. PasteTrack
  4363.     BSR    SaveUndo
  4364.     LEA    TrackBuffer,A1
  4365.     MOVEQ    #63,D0
  4366. patrloop
  4367.     MOVE.L    (A1)+,(A0)
  4368.     LEA    16(A0),A0
  4369.     DBRA    D0,patrloop
  4370.     CLR.B    RawKeyCode
  4371.     BRA    RedrawPattern
  4372.  
  4373. InsNotePattern
  4374.     BSR    SaveUndo
  4375.     MOVEQ    #0,D0
  4376.     BSR    GetPositionPtr
  4377.     BSR.S    inotr
  4378.     MOVEQ    #6,D0
  4379.     BSR    GetPositionPtr
  4380.     BSR.S    inotr
  4381.     MOVEQ    #12,D0
  4382.     BSR    GetPositionPtr
  4383.     BSR.S    inotr
  4384.     MOVEQ    #18,D0
  4385.     BSR    GetPositionPtr
  4386.     BSR.S    inotr
  4387.     BRA.S    intskip
  4388. InsNoteTrack
  4389.     BSR    SaveUndo
  4390.     BSR.S    inotr
  4391. intskip    CLR.B    RawKeyCode
  4392.     ADD.W    D2,ScrPattPos
  4393.     AND.W    #$3F,ScrPattPos
  4394.     BSR    SetScrPatternPos
  4395.     BRA    RedrawPattern
  4396.  
  4397. inotr    MOVE.W    ScrPattPos,D1
  4398.     LSL.W    #4,D1
  4399.     CMP.W    #63*16,D1
  4400.     BEQ.S    inoskip
  4401.     MOVE.W    #992,D0
  4402. intloop    MOVE.L    (A0,D0.W),16(A0,D0.W)
  4403.     SUB.W    #16,D0
  4404.     CMP.W    D1,D0
  4405.     BGE.S    intloop
  4406. inoskip    MOVEQ    #1,D2
  4407.     CLR.L    (A0,D1.W)
  4408.     RTS
  4409.  
  4410. InsCmdTrack
  4411.     BSR    SaveUndo
  4412.     MOVE.W    PattCurPos,D0
  4413.     BSR    GetPositionPtr
  4414.     BSR.S    icmtr
  4415.     BRA.S    intskip
  4416. icmtr    MOVE.W    ScrPattPos,D1
  4417.     LSL.W    #4,D1
  4418.     CMP.W    #63*16,D1
  4419.     BEQ.S    icmskip
  4420.     MOVE.W    #992,D0
  4421. icmloop    MOVE.W    2(A0,D0.W),D2
  4422.     AND.W    #$0FFF,D2
  4423.     AND.W    #$F000,18(A0,D0.W)
  4424.     OR.W    D2,18(A0,D0.W)
  4425.     SUB.W    #16,D0
  4426.     CMP.W    D1,D0
  4427.     BGE.S    icmloop
  4428. icmskip    MOVEQ    #1,D2
  4429.     AND.W    #$F000,2(A0,D1.W)
  4430.     RTS
  4431.  
  4432. DelNotePattern
  4433.     BSR    SaveUndo
  4434.     MOVEQ    #0,D0
  4435.     BSR    GetPositionPtr
  4436.     BSR.S    dnt
  4437.     MOVEQ    #6,D0
  4438.     BSR    GetPositionPtr
  4439.     BSR.S    dnt
  4440.     MOVEQ    #12,D0
  4441.     BSR    GetPositionPtr
  4442.     BSR.S    dnt
  4443.     MOVEQ    #18,D0
  4444.     BSR    GetPositionPtr
  4445.     BSR.S    dnt
  4446.     BRA    intskip
  4447. DelNoteTrack
  4448.     BSR    SaveUndo
  4449.     BSR.S    dnt
  4450.     BRA    intskip
  4451.  
  4452. dnt    MOVE.W    ScrPattPos,D0
  4453.     BEQ    Return1
  4454.     SUBQ.W    #1,D0
  4455.     LSL.W    #4,D0
  4456. dntloop    MOVE.L    16(A0,D0.W),(A0,D0.W)
  4457.     ADD.W    #16,D0
  4458.     CMP.W    #1024,D0
  4459.     BLO.S    dntloop
  4460.     MOVE.W    #1008,D1
  4461.     MOVEQ    #-1,D2
  4462.     CLR.L    (A0,D1.W)
  4463.     RTS
  4464.  
  4465. DelCmdTrack
  4466.     BSR    SaveUndo
  4467.     MOVE.W    PattCurPos,D0
  4468.     BSR    GetPositionPtr
  4469.     BSR.S    dct
  4470.     BRA    intskip
  4471. dct    MOVE.W    ScrPattPos,D0
  4472.     BEQ    Return1
  4473.     SUBQ.W    #1,D0
  4474.     LSL.W    #4,D0
  4475. dctloop    MOVE.W    18(A0,D0.W),D2
  4476.     AND.W    #$0FFF,D2
  4477.     AND.W    #$F000,2(A0,D0.W)
  4478.     OR.W    D2,2(A0,D0.W)
  4479.     ADD.W    #16,D0
  4480.     CMP.W    #1024,D0
  4481.     BLO.S    dctloop
  4482.     MOVE.W    #1008,D1
  4483.     MOVEQ    #-1,D2
  4484.     AND.W    #$F000,2(A0,D1.W)
  4485.     RTS
  4486.  
  4487. CutCmds    BSR    SaveUndo
  4488.     LEA    CmdsBuffer,A1
  4489.     CLR.W    D0
  4490. cucmloop
  4491.     MOVE.L    0(A0,D0.W),(A1)+
  4492.     AND.L    #$FFFFF000,(A0,D0.W)
  4493.     ADD.W    #16,D0
  4494.     CMP.W    #1024,D0
  4495.     BNE.S    cucmloop
  4496.     CLR.B    RawKeyCode
  4497.     BRA    RedrawPattern
  4498.  
  4499. CopyCmds
  4500.     LEA    CmdsBuffer,A1
  4501.     CLR.W    D0
  4502. cocmloop
  4503.     MOVE.L    0(A0,D0.W),(A1)+
  4504.     ADD.W    #16,D0
  4505.     CMP.W    #1024,D0
  4506.     BNE.S    cocmloop
  4507.     CLR.B    RawKeyCode
  4508.     RTS    
  4509.  
  4510. PasteCmds
  4511.     BSR    SaveUndo
  4512.     LEA    CmdsBuffer,A1
  4513.     CLR.W    D0
  4514. pacmloop
  4515.     MOVE.L    0(A0,D0.W),D1
  4516.     AND.L    #$FFFFF000,D1
  4517.     MOVE.L    (A1)+,D2
  4518.     AND.L    #$00000FFF,D2
  4519.     OR.L    D2,D1
  4520.     MOVE.L    D1,(A0,D0.W)
  4521.     ADD.W    #16,D0
  4522.     CMP.W    #1024,D0
  4523.     BNE.S    pacmloop
  4524.     CLR.B    RawKeyCode
  4525.     BRA    RedrawPattern
  4526.  
  4527. ;---- Swap Tracks ----
  4528.  
  4529. SwapTrack
  4530.     BSR    StorePtrCol
  4531.     BSR    SetWaitPtrCol
  4532.     LEA    SwapTrackText,A0
  4533.     BSR    ShowStatusText
  4534. swtloop    BSR    GetHexKey
  4535.     TST.B    D1
  4536.     BEQ.S    swtabor
  4537.     CMP.B    #4,D1
  4538.     BHI.S    swtloop
  4539.     BSR    SaveUndo
  4540.     SUBQ.L    #1,D1
  4541.     LSL.L    #2,D1
  4542.     MOVE.L    D1,D0
  4543.     MOVE.L    SongDataPtr,A0
  4544.     LEA    sd_patterndata(A0),A0
  4545.     MOVE.L    PatternNumber,D1
  4546.     LSL.L    #8,D1
  4547.     LSL.L    #2,D1
  4548.     ADD.L    D1,A0
  4549.     MOVE.L    A0,A1
  4550.     ADD.L    D0,A0
  4551.     MOVE.W    PattCurPos,D0
  4552.     DIVU    #6,D0
  4553.     AND.L    #$F,D0
  4554.     LSL.L    #2,D0
  4555.     ADD.L    D0,A1
  4556.     MOVEQ    #63,D1
  4557. swtloop2
  4558.     MOVE.L    (A0),D0
  4559.     MOVE.L    (A1),(A0)
  4560.     MOVE.L    D0,(A1)
  4561.     LEA    16(A0),A0
  4562.     LEA    16(A1),A1
  4563.     DBRA    D1,swtloop2
  4564.     BSR    RedrawPattern
  4565. swtabor    BSR    ShowAllRight
  4566.     BRA    RestorePtrCol
  4567.  
  4568. SwapTrackText    dc.b 'Swap (1/2/3/4) ?',0,0
  4569.  
  4570. ;---- Block Commands ----
  4571.  
  4572. BlockMarkText    dc.b 'mark block 00-00',0,0
  4573. BlockErrorText    dc.b 'no block marked !',0
  4574. BufEmptyText    dc.b 'buffer is empty !',0
  4575. BlockFromPos    dc.w 0
  4576. BlockToPos    dc.w 0
  4577. BlockMarkFlag    dc.w 0
  4578. BlockBufferFlag    dc.w 0
  4579. JoinPasteFlag    dc.w 0
  4580. PolyPasteFlag    dc.w 0
  4581. BuffFromPos    dc.w 0
  4582. BuffToPos    dc.w 0
  4583.  
  4584. BeginBlock
  4585.     CLR.B    RawKeyCode
  4586.     TST.W    BlockMarkFlag
  4587.     BEQ.S    beblskp
  4588. blkunma    CLR.W    BlockMarkFlag
  4589.     BRA    ShowAllRight
  4590. beblskp    MOVE.W    #1,BlockMarkFlag
  4591.     MOVE.W    ScrPattPos,BlockFromPos
  4592.     MOVE.W    ScrPattPos,BlockToPos
  4593. ShowBlockPos
  4594.     MOVE.W    BlockFromPos,D0
  4595.     MOVE.W    BlockToPos,D1
  4596.     CMP.W    D0,D1
  4597.     BHS.S    sbpskip
  4598.     EXG    D0,D1
  4599. sbpskip    LEA    BlockMarkText+12(PC),A0
  4600.     BSR    IntTo2DecAscii
  4601.     LEA    BlockMarkText+15(PC),A0
  4602.     MOVE.W    D1,D0
  4603.     BSR    IntTo2DecAscii
  4604.     LEA    BlockMarkText(PC),A0
  4605.     BRA    ShowStatusText
  4606.  
  4607. Re_MarkBlock
  4608.     CLR.B    RawKeyCode
  4609.     MOVE.W    #1,BlockMarkFlag
  4610.     MOVE.W    BlockToPos,ScrPattPos
  4611.     BSR    SetScrPatternPos
  4612.     BRA.S    ShowBlockPos
  4613.  
  4614. CheckBlockPos
  4615.     TST.W    BlockMarkFlag
  4616.     BEQ    Return1
  4617.     MOVE.W    ScrPattPos,D0
  4618.     CMP.W    BlockToPos,D0
  4619.     BEQ    Return1
  4620.     MOVE.W    D0,BlockToPos
  4621.     BRA.S    ShowBlockPos
  4622.  
  4623. IntTo2DecAscii
  4624.     AND.L    #$FF,D0
  4625.     DIVU    #10,D0
  4626.     ADD.B    #'0',D0
  4627.     MOVE.B    D0,-1(A0)
  4628.     SWAP    D0
  4629.     ADD.B    #'0',D0
  4630.     MOVE.B    D0,(A0)
  4631.     RTS
  4632.  
  4633. CutBlock
  4634.     CLR.B    RawKeyCode
  4635.     TST.W    BlockMarkFlag
  4636.     BEQ    BlockError
  4637.     BSR.S    cobldo
  4638.     MOVE.W    #1,BlockMarkFlag
  4639.     BRA    ClearBlock
  4640.  
  4641. CopyBlock
  4642.     CLR.B    RawKeyCode
  4643.     TST.W    BlockMarkFlag
  4644.     BEQ    BlockError
  4645. cobldo    CLR.W    BlockMarkFlag
  4646.     MOVE.W    #1,BlockBufferFlag
  4647.     MOVE.W    PattCurPos,D0
  4648.     BSR    GetPositionPtr
  4649.     LEA    BlockBuffer,A1
  4650.     MOVEQ    #63,D0
  4651. cobllop    MOVE.L    (A0),(A1)
  4652.     LEA    16(A0),A0
  4653.     LEA    16(A1),A1
  4654.     DBRA    D0,cobllop
  4655.     MOVE.W    BlockFromPos,D0
  4656.     MOVE.W    BlockToPos,D1
  4657.     CMP.W    D0,D1
  4658.     BHS.S    coblskp
  4659.     EXG    D0,D1
  4660. coblskp    MOVE.W    D0,BuffFromPos
  4661.     MOVE.W    D1,BuffToPos
  4662.     BRA    ShowAllRight
  4663.  
  4664.  
  4665. PasteBlock
  4666.     CLR.B    RawKeyCode
  4667.     TST.W    BlockBufferFlag
  4668.     BEQ    BufferError
  4669.     BSR    SaveUndo
  4670.     MOVE.W    PattCurPos,D0
  4671.     BSR    GetPositionPtr
  4672.     LEA    BlockBuffer,A1
  4673.     MOVE.W    BuffFromPos,D0
  4674.     MOVE.W    BuffToPos,D1
  4675.     MOVE.W    ScrPattPos,D2
  4676.     LSL.W    #4,D0
  4677.     LSL.W    #4,D1
  4678.     LSL.W    #4,D2
  4679. pabllop    MOVE.L    (A1,D0.W),D3
  4680.     TST.W    JoinPasteFlag
  4681.     BEQ.S    pablskp
  4682.     MOVE.L    D3,D4
  4683.     AND.L    #$FFFFF000,D4
  4684.     BNE.S    pablskp
  4685.     MOVE.L    (A0,D2.W),D4
  4686.     AND.L    #$FFFFF000,D4
  4687.     AND.L    #$00000FFF,D3
  4688.     OR.L    D4,D3
  4689. pablskp    MOVE.L    D3,(A0,D2.W)
  4690.     CMP.W    D0,D1
  4691.     BEQ.S    pablend
  4692.     CMP.W    #63*16,D0
  4693.     BEQ.S    pablend
  4694.     CMP.W    #63*16,D2
  4695.     BEQ.S    pablend
  4696.     ADD.W    #16,D0
  4697.     ADD.W    #16,D2
  4698.     TST.W    PolyPasteFlag
  4699.     BEQ.S    pabllop
  4700.     MOVEM.L    A1/D0-D2,-(SP)
  4701.     BSR    GotoNextMulti
  4702.     MOVE.W    PattCurPos,D0
  4703.     BSR    GetPositionPtr
  4704.     MOVEM.L    (SP)+,A1/D0-D2
  4705.     BRA.S    pabllop
  4706. pablend    CLR.W    JoinPasteFlag
  4707.     CLR.W    PolyPasteFlag
  4708.     BSR    ShowAllRight
  4709.     BSR    RedrawPattern
  4710.     TST.W    ShiftKeyStatus
  4711.     BNE    Return1
  4712.     MOVE.W    BuffToPos,D0
  4713.     SUB.W    BuffFromPos,D0
  4714.     ADDQ.W    #1,D0
  4715.     ADD.W    ScrPattPos,D0
  4716.     CMP.W    #63,D0
  4717.     BLS.S    pablset
  4718.     MOVEQ    #0,D0
  4719. pablset    MOVE.W    D0,ScrPattPos
  4720.     BRA    SetScrPatternPos
  4721.  
  4722. PolyphonizeBlock
  4723.     MOVE.W    #1,PolyPasteFlag
  4724. JoinPasteBlock
  4725.     MOVE.W    #1,JoinPasteFlag
  4726.     BRA    PasteBlock
  4727.  
  4728. InsertBlock
  4729.     CLR.B    RawKeyCode
  4730.     TST.W    BlockBufferFlag
  4731.     BEQ    BufferError
  4732.     CMP.W    #63,ScrPattPos
  4733.     BEQ    PasteBlock
  4734.     MOVE.W    BuffToPos,D0
  4735.     SUB.W    BuffFromPos,D0
  4736. inbllop    MOVE.L    D0,-(SP)
  4737.     MOVE.W    PattCurPos,D0
  4738.     BSR    GetPositionPtr
  4739.     BSR    inotr
  4740.     MOVE.L    (SP)+,D0
  4741.     DBRA    D0,inbllop
  4742.     BRA    PasteBlock
  4743.  
  4744. DeleteBlock
  4745.     CLR.B    RawKeyCode
  4746.     TST.W    BlockMarkFlag
  4747.     BEQ    BlockError
  4748.     BSR    SaveUndo
  4749.     MOVE.W    BlockFromPos,D0
  4750.     MOVE.W    BlockToPos,D1
  4751.     CMP.W    D0,D1
  4752.     BHS.S    deblskp
  4753.     EXG    D0,D1
  4754. deblskp    CMP.W    #63,D1
  4755.     BEQ.S    ClearBlock
  4756.     CLR.W    BlockMarkFlag
  4757.     MOVE.W    D0,ScrPattPos
  4758.     ADDQ.W    #1,ScrPattPos
  4759.     SUB.W    D0,D1
  4760.     MOVE.W    D1,D0
  4761. debllop    MOVE.L    D0,-(SP)
  4762.     MOVE.W    PattCurPos,D0
  4763.     BSR    GetPositionPtr
  4764.     BSR    dnt
  4765.     MOVE.L    (SP)+,D0
  4766.     DBRA    D0,debllop
  4767.     SUBQ.W    #1,ScrPattPos
  4768.     BSR    ShowAllRight
  4769.     BRA    RedrawPattern
  4770.  
  4771. ClearBlock
  4772.     TST.W    BlockMarkFlag
  4773.     BEQ    BlockError
  4774.     BSR    SaveUndo
  4775.     CLR.W    BlockMarkFlag
  4776.     MOVE.W    PattCurPos,D0
  4777.     BSR    GetPositionPtr
  4778.     MOVE.W    BlockFromPos,D0
  4779.     MOVE.W    BlockToPos,D1
  4780.     CMP.W    D0,D1
  4781.     BHS.S    clblskp
  4782.     EXG    D0,D1
  4783. clblskp    LSL.W    #4,D0
  4784.     LSL.W    #4,D1
  4785.     MOVEQ    #0,D2
  4786. clbllop    MOVE.L    D2,(A0,D0.W)
  4787.     CMP.W    D0,D1
  4788.     BEQ.S    clblend
  4789.     ADD.W    #16,D0
  4790.     BRA.S    clbllop
  4791. clblend    BSR    ShowAllRight
  4792.     BRA    RedrawPattern
  4793.  
  4794. BackwardsBlock
  4795.     CLR.B    RawKeyCode
  4796.     TST.W    BlockMarkFlag
  4797.     BEQ    BlockError
  4798.     BSR    SaveUndo
  4799.     CLR.W    BlockMarkFlag
  4800.     MOVE.W    PattCurPos,D0
  4801.     BSR    GetPositionPtr
  4802.     MOVE.W    BlockFromPos,D0
  4803.     MOVE.W    BlockToPos,D1
  4804.     CMP.W    D0,D1
  4805.     BHS.S    bablskp
  4806.     EXG    D0,D1
  4807. bablskp    LSL.W    #4,D0
  4808.     LSL.W    #4,D1
  4809. babllop    MOVE.L    (A0,D0.W),D2
  4810.     MOVE.L    (A0,D1.W),(A0,D0.W)
  4811.     MOVE.L    D2,(A0,D1.W)
  4812.     CMP.W    D1,D0
  4813.     BHS.S    bablend
  4814.     ADD.W    #16,D0
  4815.     SUB.W    #16,D1
  4816.     CMP.W    D1,D0
  4817.     BHS.S    bablend
  4818.     BRA.S    babllop
  4819. bablend    BSR    ShowAllRight
  4820.     BRA    RedrawPattern
  4821.  
  4822. TransBlockUp
  4823.     SF    trblflag
  4824.     BRA.S    trbldo
  4825. TransBlockDown
  4826.     ST    trblflag
  4827. trbldo    CLR.B    RawKeyCode
  4828.     TST.W    BlockMarkFlag
  4829.     BEQ.S    BlockError
  4830.     BSR    SaveUndo
  4831.     MOVE.W    #2,NoteShift
  4832.     MOVE.W    BlockFromPos,D0
  4833.     MOVE.W    BlockToPos,D1
  4834.     CMP.W    D0,D1
  4835.     BHS.S    trblskp
  4836.     EXG    D0,D1
  4837. trblskp    MOVE.W    D0,D5
  4838.     LSL.W    #4,D5
  4839.     SUB.W    D0,D1
  4840.     MOVE.W    D1,D6
  4841.     MOVE.W    PattCurPos,D0
  4842.     BSR    GetPositionPtr
  4843.     LEA    (A0,D5.W),A3
  4844.     MOVEQ    #0,D3
  4845.     MOVE.B    SampleAllFlag,sampallsave
  4846.     ST    SampleAllFlag
  4847.     TST.B    trblflag
  4848.     BEQ.S    trblup
  4849.     BSR    sandlo2
  4850.     MOVE.B    sampallsave,SampleAllFlag
  4851.     BRA    RedrawPattern
  4852. trblup    BSR    sanulo2
  4853.     MOVE.B    sampallsave,SampleAllFlag
  4854.     BRA    RedrawPattern
  4855.  
  4856. trblflag    dc.b 0
  4857. sampallsave    dc.b 0
  4858.  
  4859. BlockError
  4860.     LEA    BlockErrorText,A0
  4861.     BSR    ShowStatusText
  4862.     BRA    SetErrorPtrCol
  4863.  
  4864. BufferError
  4865.     LEA    BufEmptyText,A0
  4866.     BSR    ShowStatusText
  4867.     BRA    SetErrorPtrCol
  4868.  
  4869. ExpandTrack
  4870.     CLR.B    RawKeyCode
  4871.     BSR    SaveUndo
  4872.     MOVE.W    ScrPattPos,PosSave
  4873.     ADDQ.W    #1,ScrPattPos
  4874.     CMP.W    #64,ScrPattPos
  4875.     BHS.S    extrend
  4876. extrlop    MOVE.W    PattCurPos,D0
  4877.     BSR    GetPositionPtr
  4878.     BSR    inotr
  4879.     ADDQ.W    #2,ScrPattPos
  4880.     CMP.W    #64,ScrPattPos
  4881.     BLO.S    extrlop
  4882. extrend    MOVE.W    PosSave,ScrPattPos
  4883.     BRA    RedrawPattern
  4884.  
  4885. ContractTrack
  4886.     CLR.B    RawKeyCode
  4887.     BSR    SaveUndo
  4888.     MOVE.W    ScrPattPos,PosSave
  4889.     ADDQ.W    #1,ScrPattPos
  4890.     CMP.W    #64,ScrPattPos
  4891.     BHS.S    cotrend
  4892. cotrlop    MOVE.W    PattCurPos,D0
  4893.     BSR    GetPositionPtr
  4894.     BSR    dnt
  4895.     ADDQ.W    #1,ScrPattPos
  4896.     CMP.W    #64,ScrPattPos
  4897.     BLO.S    cotrlop
  4898. cotrend    MOVE.W    PosSave,ScrPattPos
  4899.     BRA    RedrawPattern
  4900.  
  4901. PosSave    dc.w 0
  4902.  
  4903.  
  4904. KillToEndOfTrack
  4905.     CLR.B    RawKeyCode
  4906.     BSR    SaveUndo
  4907.     MOVE.W    PattCurPos,D0
  4908.     BSR    GetPositionPtr
  4909.     MOVE.W    ScrPattPos,D0
  4910.     MOVE.W    D0,D1
  4911.     MULU    #16,D1
  4912.     LEA    (A0,D1.W),A0
  4913.     TST.W    ShiftKeyStatus
  4914.     BNE.S    KillToStart
  4915. kteot    CLR.L    (A0)
  4916.     LEA    16(A0),A0
  4917.     ADDQ.W    #1,D0
  4918.     CMP.W    #64,D0
  4919.     BLO.S    kteot
  4920.     BRA    RedrawPattern
  4921.  
  4922. KillToStart
  4923.     CLR.L    (A0)
  4924.     LEA    -16(A0),A0
  4925.     TST.W    D0
  4926.     BEQ    RedrawPattern
  4927.     SUBQ.W    #1,D0
  4928.     BRA.S    KillToStart
  4929.  
  4930. UndoLastChange
  4931.     CLR.B    RawKeyCode
  4932.     MOVEQ    #0,D0
  4933.     BSR    GetPositionPtr
  4934.     LEA    UndoBuffer,A1
  4935.     MOVE.W    #255,D0
  4936. unlalop    MOVE.L    (A1),D1
  4937.     MOVE.L    (A0),(A1)+
  4938.     MOVE.L    D1,(A0)+
  4939.     DBRA    D0,unlalop
  4940.     BRA    RedrawPattern
  4941.  
  4942. SaveUndo
  4943.     MOVEM.L    D0/A0-A1,-(SP)
  4944.     MOVEQ    #0,D0
  4945.     BSR    GetPositionPtr
  4946.     LEA    UndoBuffer,A1
  4947.     MOVE.W    #255,D0
  4948. saunlop    MOVE.L    (A0)+,(A1)+
  4949.     DBRA    D0,saunlop
  4950.     MOVEM.L    (SP)+,D0/A0-A1
  4951.     RTS
  4952.  
  4953. BoostAll
  4954.     LEA    BoostAllText,A0
  4955.     BSR    AreYouSure
  4956.     BNE    SetErrorPtrCol
  4957.     MOVE.W    InsNum,SaveInstr
  4958.     MOVE.W    #1,InsNum
  4959. boallop    BSR    ShowSampleInfo
  4960.     BSR    Boost2
  4961.     ADDQ.W    #1,InsNum
  4962.     CMP.W    #32,InsNum
  4963.     BLO.S    boallop
  4964.     MOVE.W    SaveInstr,InsNum
  4965.     BRA    ShowSampleInfo
  4966.  
  4967. FilterAll
  4968.     LEA    FilterAllText,A0
  4969.     BSR    AreYouSure
  4970.     BNE    SetErrorPtrCol
  4971.     MOVE.W    InsNum,SaveInstr
  4972.     MOVE.W    #1,InsNum
  4973. fiallop    BSR    ShowSampleInfo
  4974.     BSR    Filter2
  4975.     ADDQ.W    #1,InsNum
  4976.     CMP.W    #32,InsNum
  4977.     BLO.S    fiallop
  4978.     MOVE.W    SaveInstr,InsNum
  4979.     BRA    ShowSampleInfo
  4980.  
  4981. BoostAllText    dc.b 'boost all samples',0
  4982. FilterAllText    dc.b 'filter all sampls',0
  4983. SaveInstr    dc.w 0
  4984.  
  4985. ;---- Check Function Keys F1-F2 ----
  4986.  
  4987. CheckF1_F2
  4988.     CMP.B    #80,RawKeyCode
  4989.     BEQ.S    SetOctaveLow
  4990.     CMP.B    #81,RawKeyCode
  4991.     BEQ.S    SetOctaveHigh
  4992.     RTS    
  4993.  
  4994. SetOctaveLow
  4995.     MOVE.L    #KbdTransTable1,KeyTransTabPtr
  4996.     CLR.B    RawKeyCode
  4997.     RTS    
  4998.  
  4999. SetOctaveHigh
  5000.     MOVE.L    #KbdTransTable2,KeyTransTabPtr
  5001.     CLR.B    RawKeyCode
  5002.     RTS    
  5003.  
  5004.  
  5005. ;---- Get Hex Key ----
  5006.  
  5007. GetHexByte
  5008.     BSR    StorePtrCol
  5009.     BSR    SetWaitPtrCol
  5010.     CLR.B    RawKeyCode
  5011.     MOVEQ    #0,D0
  5012.     MOVE.W    TextOffset,D0
  5013.     DIVU    #40,D0
  5014.     ADDQ.W    #6,D0
  5015.     MOVE.W    D0,LineCurY
  5016.     SWAP    D0
  5017.     LSL.W    #3,D0
  5018.     ADDQ.W    #4,D0
  5019.     MOVE.W    D0,LineCurX
  5020.     BSR    UpdateLineCurPos
  5021.     BSR.S    GetHexKey
  5022.     MOVE.L    D1,D0
  5023.     MOVE.B    D1,D6
  5024.     LSL.B    #4,D6
  5025.     BSR    PrintHexDigit
  5026.     ADD.W    #8,LineCurX
  5027.     BSR    UpdateLineCurPos
  5028.     BSR.S    GetHexKey
  5029.     MOVE.L    D1,D0
  5030.     OR.B    D1,D6
  5031.     BSR    PrintHexDigit
  5032.     CLR.W    LineCurX
  5033.     MOVE.W    #270,LineCurY
  5034.     BSR    UpdateLineCurPos
  5035.     BSR    RestorePtrCol
  5036.     MOVEQ    #0,D0
  5037.     MOVE.B    D6,D0
  5038.     RTS
  5039.  
  5040. GetHexKey
  5041.     CLR.B    MixChar
  5042.     MOVEQ    #0,D0
  5043.     MOVEQ    #0,D1
  5044.     BTST    #2,$DFF016
  5045.     BEQ.S    ghkreturn
  5046.     BSR    DoKeyBuffer
  5047.     MOVE.B    RawKeyCode,D0
  5048.     MOVE.B    D0,MixChar
  5049.     BEQ.S    GetHexKey
  5050.     CMP.B    #68,D0 ; CR
  5051.     BEQ.S    ghkreturn
  5052.     CMP.B    #69,D0 ; Esc
  5053.     BEQ.S    ghkreturn
  5054.     CMP.B    #79,D0 ; <--
  5055.     BEQ.S    ghkleft
  5056.     CMP.B    #78,D0 ; -->
  5057.     BEQ.S    ghkright
  5058.     BSR.S    CheckHexKey
  5059.     CMP.B    #16,D1
  5060.     BEQ.S    GetHexKey
  5061.     CLR.B    RawKeyCode
  5062. ghkreturn
  5063.     MOVEQ    #0,D0
  5064.     RTS
  5065.  
  5066. ghkleft    MOVEQ    #-1,D0
  5067.     RTS
  5068.  
  5069. ghkright
  5070.     MOVEQ    #1,D0
  5071.     RTS
  5072.  
  5073. CheckHexKey
  5074.     LEA    RawKeyHexTable,A0
  5075.     MOVEQ    #0,D1
  5076. chxloop    CMP.B    (A0)+,D0
  5077.     BEQ    Return1
  5078.     ADDQ.B    #1,D1
  5079.     CMP.B    #16,D1
  5080.     BNE.S    chxloop
  5081.     RTS
  5082.  
  5083. ;---- Enter Edit Commands (effects) ----
  5084.  
  5085. EditCommand
  5086.     TST.L    EditMode
  5087.     BEQ    Return1
  5088.     MOVEQ    #0,D0
  5089.     MOVE.B    RawKeyCode,D0
  5090.     BSR.S    CheckHexKey
  5091.     CMP.B    #16,D1
  5092.     BNE.S    DoEditCommand
  5093.     RTS
  5094.  
  5095. DoEditCommand
  5096.     CMP.W    #1,PattCurPos
  5097.     BNE.S    ChkPos2
  5098.     CMP.W    #1,D1
  5099.     BHI    Return1
  5100.     MOVE.L    #$FFF,D2
  5101.     CLR.W    CmdOffset
  5102.     LSL.W    #4,D1
  5103.     LSL.W    #8,D1
  5104.     BRA    UpdateCommand
  5105.  
  5106. ChkPos2    CMP.W    #2,PattCurPos
  5107.     BNE.S    ChkPos3
  5108.     MOVE.L    #$FFF,D2
  5109.     MOVE.W    #2,CmdOffset
  5110.     LSL.W    #4,D1
  5111.     LSL.W    #8,D1
  5112.     BRA    UpdateCommand
  5113.  
  5114. ChkPos3    CMP.W    #3,PattCurPos
  5115.     BNE.S    ChkPos4
  5116.     MOVE.L    #$F0FF,D2
  5117.     MOVE.W    #2,CmdOffset
  5118.     LSL.W    #8,D1
  5119.     BRA    UpdateCommand
  5120.  
  5121. ChkPos4    CMP.W    #4,PattCurPos
  5122.     BNE.S    ChkPos5
  5123.     MOVE.L    #$FF0F,D2
  5124.     MOVE.W    #2,CmdOffset
  5125.     LSL.W    #4,D1
  5126.     BRA    UpdateCommand
  5127.  
  5128. ChkPos5    CMP.W    #5,PattCurPos
  5129.     BNE.S    ChkPos7
  5130.     MOVE.L    #$FFF0,D2
  5131.     MOVE.W    #2,CmdOffset
  5132.     BRA    UpdateCommand
  5133.  
  5134. ChkPos7    CMP.W    #7,PattCurPos
  5135.     BNE.S    ChkPos8
  5136.     CMP.W    #1,D1
  5137.     BHI    Return1
  5138.     MOVE.L    #$FFF,D2
  5139.     MOVE.W    #4,CmdOffset
  5140.     LSL.W    #4,D1
  5141.     LSL.W    #8,D1
  5142.     BRA    UpdateCommand
  5143.  
  5144. ChkPos8    CMP.W    #8,PattCurPos
  5145.     BNE.S    ChkPos9
  5146.     MOVE.L    #$FFF,D2
  5147.     MOVE.W    #6,CmdOffset
  5148.     LSL.W    #4,D1
  5149.     LSL.W    #8,D1
  5150.     BRA    UpdateCommand
  5151.  
  5152. ChkPos9    CMP.W    #9,PattCurPos
  5153.     BNE.S    ChkPos10
  5154.     MOVE.L    #$F0FF,D2
  5155.     MOVE.W    #6,CmdOffset
  5156.     LSL.W    #8,D1
  5157.     BRA    UpdateCommand
  5158.  
  5159. ChkPos10
  5160.     CMP.W    #10,PattCurPos
  5161.     BNE.S    ChkPos11
  5162.     MOVE.L    #$FF0F,D2
  5163.     MOVE.W    #6,CmdOffset
  5164.     LSL.W    #4,D1
  5165.     BRA    UpdateCommand
  5166.  
  5167. ChkPos11
  5168.     CMP.W    #11,PattCurPos
  5169.     BNE.S    ChkPos13
  5170.     MOVE.L    #$FFF0,D2
  5171.     MOVE.W    #6,CmdOffset
  5172.     BRA    UpdateCommand
  5173.  
  5174. ChkPos13
  5175.     CMP.W    #13,PattCurPos
  5176.     BNE.S    ChkPos14
  5177.     CMP.W    #1,D1
  5178.     BHI    Return1
  5179.     MOVE.L    #$FFF,D2
  5180.     MOVE.W    #8,CmdOffset
  5181.     LSL.W    #4,D1
  5182.     LSL.W    #8,D1
  5183.     BRA    UpdateCommand
  5184.  
  5185. ChkPos14
  5186.     CMP.W    #14,PattCurPos
  5187.     BNE.S    ChkPos15
  5188.     MOVE.L    #$FFF,D2
  5189.     MOVE.W    #10,CmdOffset
  5190.     LSL.W    #4,D1
  5191.     LSL.W    #8,D1
  5192.     BRA    UpdateCommand
  5193.  
  5194. ChkPos15
  5195.     CMP.W    #15,PattCurPos
  5196.     BNE.S    ChkPos16
  5197.     MOVE.L    #$F0FF,D2
  5198.     MOVE.W    #10,CmdOffset
  5199.     LSL.W    #8,D1
  5200.     BRA    UpdateCommand
  5201.  
  5202. ChkPos16
  5203.     CMP.W    #16,PattCurPos
  5204.     BNE.S    ChkPos17
  5205.     MOVE.L    #$FF0F,D2
  5206.     MOVE.W    #10,CmdOffset
  5207.     LSL.W    #4,D1
  5208.     BRA    UpdateCommand
  5209.  
  5210. ChkPos17
  5211.     CMP.W    #17,PattCurPos
  5212.     BNE.S    ChkPos19
  5213.     MOVE.L    #$FFF0,D2
  5214.     MOVE.W    #10,CmdOffset
  5215.     BRA    UpdateCommand
  5216.  
  5217. ChkPos19
  5218.     CMP.W    #19,PattCurPos
  5219.     BNE.S    ChkPos20
  5220.     CMP.W    #1,D1
  5221.     BHI    Return1
  5222.     MOVE.L    #$FFF,D2
  5223.     MOVE.W    #12,CmdOffset
  5224.     LSL.W    #4,D1
  5225.     LSL.W    #8,D1
  5226.     BRA.S    UpdateCommand
  5227.  
  5228. ChkPos20
  5229.     CMP.W    #20,PattCurPos
  5230.     BNE.S    ChkPos21
  5231.     MOVE.L    #$FFF,D2
  5232.     MOVE.W    #14,CmdOffset
  5233.     LSL.W    #4,D1
  5234.     LSL.W    #8,D1
  5235.     BRA.S    UpdateCommand
  5236.  
  5237. ChkPos21
  5238.     CMP.W    #21,PattCurPos
  5239.     BNE.S    ChkPos22
  5240.     MOVE.L    #$F0FF,D2
  5241.     MOVE.W    #14,CmdOffset
  5242.     LSL.W    #8,D1
  5243.     BRA.S    UpdateCommand
  5244.  
  5245. ChkPos22
  5246.     CMP.W    #22,PattCurPos
  5247.     BNE.S    MustBePos23
  5248.     MOVE.L    #$FF0F,D2
  5249.     MOVE.W    #14,CmdOffset
  5250.     LSL.W    #4,D1
  5251.     BRA.S    UpdateCommand
  5252.  
  5253. MustBePos23
  5254.     MOVE.L    #$FFF0,D2
  5255.     MOVE.W    #14,CmdOffset
  5256. UpdateCommand
  5257.     MOVE.L    SongDataPtr,A0
  5258.     LEA    sd_patterndata(A0),A0
  5259.     MOVE.L    PatternNumber,D0
  5260.     LSL.L    #8,D0
  5261.     LSL.L    #2,D0
  5262.     ADD.L    D0,A0
  5263.     MOVEQ    #0,D0
  5264.     MOVE.W    ScrPattPos,D0
  5265.     LSL.W    #4,D0
  5266.     EXT.L    D0
  5267.     ADD.L    D0,A0
  5268.     ADD.W    CmdOffset,A0
  5269.     AND.W    D2,(A0)
  5270.     ADD.W    D1,(A0)
  5271.     MOVE.W    (A0),WordNumber
  5272.     MOVEQ    #0,D0
  5273.     MOVE.W    ScrPattPos,D0
  5274.     MULU    #7*40,D0
  5275.     MOVE.W    PattCurPos,D1
  5276.     DIVU    #6,D1
  5277.     MULU    #9,D1
  5278.     ADD.L    D1,D0
  5279.     ADD.W    #7528,D0
  5280.     MOVE.W    D0,TextOffset
  5281.     CMP.W    #0,CmdOffset
  5282.     BEQ.S    ShowInstrNibble
  5283.     CMP.W    #4,CmdOffset
  5284.     BEQ.S    ShowInstrNibble
  5285.     CMP.W    #8,CmdOffset
  5286.     BEQ.S    ShowInstrNibble
  5287.     CMP.W    #12,CmdOffset
  5288.     BEQ.S    ShowInstrNibble
  5289.     BSR    PrintHexWord
  5290. dscend    BSR    EditMoveDown
  5291.     CLR.B    RawKeyCode
  5292.     RTS
  5293.  
  5294. ShowInstrNibble
  5295.     SUBQ.W    #1,TextOffset
  5296.     MOVE.W    #1,TextLength
  5297.     MOVEQ    #0,D0
  5298.     MOVE.W    (A0),D0
  5299.     AND.W    #$F000,D0
  5300.     BNE.S    sinokok
  5301.     TST.B    BlankZeroFlag
  5302.     BEQ.S    sinokok    
  5303.     MOVE.L    #BlankInsText,D0
  5304.     BRA.S    sinprt
  5305. sinokok    LSR.W    #4,D0
  5306.     LSR.W    #7,D0
  5307.     ADD.L    #FastHexTable+1,D0
  5308. sinprt    MOVE.L    D0,ShowTextPtr
  5309.     BSR    ShowText
  5310.     BRA.S    dscend
  5311.  
  5312. ;---- Store/Insert Effect Commands ----
  5313.  
  5314. CheckStoreEffect
  5315.     MOVEQ    #0,D0
  5316.     MOVE.B    RawKeyCode,D0
  5317.     BEQ    Return1
  5318.     CMP.B    #70,D0 ; Del
  5319.     BEQ    CheckKeyboard2
  5320.     CMP.B    #10,D0
  5321.     BHI    Return1
  5322.     SUBQ.B    #1,D0
  5323.     ADD.B    D0,D0
  5324.     MOVE.L    D0,D7
  5325.     MOVE.W    PattCurPos,D0
  5326.     BSR    GetPositionPtr
  5327.     MOVE.W    ScrPattPos,D0
  5328.     LSL.W    #4,D0
  5329.     LEA    (A0,D0.W),A0
  5330.     MOVE.W    2(A0),D0
  5331.     AND.W    #$0FFF,D0
  5332.     LEA    EffectMacros,A0
  5333.     MOVE.W    D0,(A0,D7.W)
  5334.     LEA    CommandStoredText,A0
  5335.     BSR    ShowStatusText
  5336.     BSR    WaitALittle
  5337.     BRA    ShowAllRight
  5338.  
  5339. CommandStoredText dc.b 'command stored!',0
  5340.  
  5341. CheckInsertEffect
  5342.     CLR.W    InsEfx
  5343.     MOVEQ    #0,D0
  5344.     MOVE.B    RawKeyCode,D0
  5345.     BEQ    Return1
  5346.     CMP.B    #70,D0 ; Del
  5347.     BEQ    CheckKeyboard2
  5348.     CMP.B    #11,D0 ; -
  5349.     BEQ    DecreaseEffect
  5350.     CMP.B    #12,D0 ; = (+)
  5351.     BEQ.S    IncreaseEffect
  5352.     CMP.B    #13,D0 ; \
  5353.     BEQ.S    CopyEffect
  5354.     CMP.B    #10,D0
  5355.     BHI    Return1
  5356.     SUBQ.B    #1,D0
  5357.     ADD.B    D0,D0
  5358.     LEA    EffectMacros,A0
  5359.     MOVE.W    (A0,D0.W),InsEfx
  5360. DoInsEffect
  5361.     MOVE.B    #70,RawKeyCode
  5362.     BRA    CheckNoteKeys
  5363.  
  5364. GetLastEffect
  5365.     MOVE.W    PattCurPos,D0
  5366.     BSR    GetPositionPtr
  5367.     MOVE.W    ScrPattPos,D0
  5368.     SUBQ.W    #1,D0
  5369.     AND.W    #$3F,D0
  5370.     LSL.W    #4,D0
  5371.     LEA    (A0,D0.W),A0
  5372.     MOVE.W    2(A0),D0
  5373.     AND.W    #$0FFF,D0
  5374.     RTS
  5375.  
  5376. CopyEffect
  5377.     BSR.S    GetLastEffect
  5378.     MOVE.W    D0,InsEfx
  5379.     BRA.S    DoInsEffect
  5380.  
  5381. IncreaseEffect
  5382.     BSR.S    GetLastEffect
  5383.     MOVE.W    D0,D1
  5384.     AND.W    #$0F00,D1
  5385.     CMP.W    #$0E00,D1
  5386.     BEQ.S    IncECom
  5387.     ADDQ.B    #1,D0
  5388.     MOVE.W    D0,InsEfx
  5389.     BRA.S    DoInsEffect
  5390.  
  5391. IncECom    MOVE.W    D0,D1
  5392.     ADDQ.B    #1,D1
  5393.     AND.B    #$0F,D1
  5394.     AND.W    #$0FF0,D0
  5395.     OR.B    D1,D0
  5396.     MOVE.W    D0,InsEfx
  5397.     BRA.S    DoInsEffect
  5398.  
  5399. DecreaseEffect
  5400.     BSR.S    GetLastEffect
  5401.     MOVE.W    D0,D1
  5402.     AND.W    #$0F00,D1
  5403.     CMP.W    #$0E00,D1
  5404.     BEQ.S    DecECom
  5405.     SUBQ.B    #1,D0
  5406.     MOVE.W    D0,InsEfx
  5407.     BRA    DoInsEffect
  5408.  
  5409. DecECom    MOVE.W    D0,D1
  5410.     SUBQ.B    #1,D1
  5411.     AND.B    #$0F,D1
  5412.     AND.W    #$0FF0,D0
  5413.     OR.B    D1,D0
  5414.     MOVE.W    D0,InsEfx
  5415.     BRA    DoInsEffect
  5416.  
  5417. InsEfx    dc.w 0
  5418.  
  5419. ;---- Check Keyboard for notekeys ----
  5420.  
  5421. CheckKeyboard
  5422.     TST.B    RawKeyCode
  5423.     BEQ    Return1
  5424.     TST.W    LeftAmigaStatus
  5425.     BNE    Return1
  5426.     TST.W    CtrlKeyStatus
  5427.     BNE    Return1
  5428.     TST.W    ShiftKeyStatus
  5429.     BNE    CheckStoreEffect
  5430.     TST.W    AltKeyStatus
  5431.     BNE    CheckInsertEffect
  5432. CheckKeyboard2
  5433.     MOVE.W    PattCurPos,D0
  5434.     BEQ.S    CheckNoteKeys
  5435.     CMP.W    #6,D0
  5436.     BEQ.S    CheckNoteKeys
  5437.     CMP.W    #12,D0
  5438.     BEQ.S    CheckNoteKeys
  5439.     CMP.W    #18,D0
  5440.     BEQ.S    CheckNoteKeys
  5441.     TST.L    EditMode
  5442.     BNE    EditCommand
  5443.     RTS    
  5444.  
  5445. CheckNoteKeys
  5446.     LEA    RawKeyScaleTable,A0
  5447.     MOVE.B    RawKeyCode,D1
  5448.     MOVEQ    #38,D0
  5449. cnkloop    CMP.B    0(A0,D0.W),D1
  5450.     BEQ.S    NoteKeyPressed
  5451.     DBRA    D0,cnkloop
  5452.     RTS
  5453.  
  5454. NoteKeyPressed
  5455.     CLR.B    RawKeyCode
  5456.     MOVE.L    KeyTransTabPtr,A1
  5457.     MOVE.B    (A1,D0.W),D0
  5458.     CMP.W    #36,D0
  5459.     BHS.S    nkpskip
  5460.     MOVE.L    SplitAddress,D1
  5461.     BEQ.S    nkpskip
  5462.     CLR.L    SplitAddress
  5463.     MOVE.L    D1,A0
  5464.     MOVE.B    D0,(A0)
  5465.     MOVE.W    SamNoteType,D1
  5466.     BEQ    ShowSplit
  5467.     CLR.W    SamNoteType
  5468.     AND.W    #$FF,D0
  5469.     MOVE.W    D0,(A0)
  5470.     CMP.W    #1,D1
  5471.     BEQ.S    loclab1
  5472.     CMP.W    #3,D1
  5473.     BEQ    ShowS2TuneNote
  5474.     CMP.W    #4,D1
  5475.     BEQ    ShowAllRight
  5476.     JMP    ShowResamNote
  5477. loclab1    JMP    ShowSamNote
  5478. nkpskip    MOVE.W    InsNum,PlayInsNum
  5479.     TST.B    SplitFlag
  5480.     BEQ.S    nkpskip2
  5481.     LEA    SplitInstrTable,A1
  5482.     MOVE.B    (A1,D0.W),D1
  5483.     BEQ.S    nkpskip3
  5484.     MOVE.B    D1,PlayInsNum+1
  5485. nkpskip3
  5486.     LEA    SplitTransTable,A1
  5487.     MOVE.B    (A1,D0.W),D0
  5488. nkpskip2
  5489.     MOVEQ    #0,D2
  5490. playtheinstr
  5491.     LEA    PeriodTable,A1 ; note in d0 here
  5492.     MOVE.L    D0,D4
  5493.     LSL.W    #1,D0
  5494.     MOVEQ    #0,D3
  5495.     MOVE.W    (A1,D0.W),D3
  5496.  
  5497.     MOVE.L    SongDataPtr,A0 ; This fixes finetune...
  5498.     LEA    14(A0),A0
  5499.     MOVE.W    InsNum,D1
  5500.     BNE.S    nkpskipit
  5501.     MOVE.W    LastInsNum,D1
  5502. nkpskipit
  5503.     MULU    #30,D1
  5504.     ADD.L    D1,A0
  5505.     MOVEQ    #0,D1
  5506.     MOVE.B    (A0),D1 ; get finetune
  5507.     MULU    #37*2,D1
  5508.     ADD.L    D1,A1
  5509.     MOVE.W    (A1,D0.W),CurrentPlayNote
  5510.     TST.L    D2
  5511.     BEQ.S    nkpnrml
  5512.     CMP.B    #2,pnoteflag
  5513.     BNE    antpskip
  5514.  
  5515. nkpnrml    TST.L    EditMode
  5516.     BEQ    antpskip
  5517. AddNoteToPattern
  5518.     MOVE.L    SongDataPtr,A0
  5519.     LEA    sd_patterndata(A0),A0    ; Find first pattern
  5520.     MOVE.L    PatternNumber,D0
  5521.     LSL.L    #8,D0
  5522.     LSL.L    #2,D0
  5523.     ADD.L    D0,A0    ; Find current pattern
  5524.     MOVEQ    #0,D0
  5525.     MOVE.W    ScrPattPos,D0
  5526.     BSR    QuantizeCheck
  5527.     LSL.W    #4,D0
  5528.     EXT.L    D0
  5529.     ADD.L    D0,A0    ; Find current pos
  5530.     MOVE.W    PattCurPos,D0
  5531.     DIVU    #6,D0
  5532.     LSL.W    #2,D0
  5533.     EXT.L    D0
  5534.     ADD.L    D0,A0    ; Find current channel
  5535.     TST.W    AltKeyStatus
  5536.     BEQ.S    antpsks
  5537.     AND.L    #$FFFFF000,(A0)
  5538.     MOVE.W    InsEfx,D0
  5539.     OR.W    D0,2(A0)
  5540.     BRA.S    antp3
  5541. antpsks    TST.W    ShiftKeyStatus
  5542.     BEQ.S    antpskip2
  5543.     CLR.L    (A0)
  5544. antpskip2
  5545.     MOVE.W    D3,(A0)    ; Put note into pattern
  5546.     BEQ.S    antp2
  5547.     TST.B    AutoInsFlag
  5548.     BEQ.S    antp4
  5549.     MOVE.W    VolumeEfx,2(A0)
  5550. antp4    MOVEQ    #0,D0
  5551.     MOVE.W    PlayInsNum,D0
  5552.     LSL.W    #4,D0
  5553.     AND.B    #$F,2(A0)
  5554.     ADD.B    D0,2(A0)
  5555.     LSL.W    #4,D0
  5556.     AND.W    #$F000,D0
  5557.     OR.W    D0,(A0)
  5558.     BRA.S    antp3
  5559.  
  5560. antp2    AND.W    #$0FFF,2(A0)
  5561. antp3    MOVE.W    2(A0),CurrCmds
  5562.     MOVE.L    NoteNamesPtr,A0
  5563.     LSL.W    #2,D4
  5564.     EXT.L    D4
  5565.     ADD.L    D4,A0
  5566.     MOVE.L    A0,ShowTextPtr
  5567.     MOVE.W    #3,TextLength
  5568.     MOVEQ    #0,D0
  5569.     MOVE.W    ScrPattPos,D0
  5570.     BSR    QuantizeCheck
  5571.     MULU    #7*40,D0
  5572.     MOVEQ    #0,D1
  5573.     MOVE.W    PattCurPos,D1
  5574.     DIVU    #6,D1
  5575.     MULU    #9,D1
  5576.     ADD.L    D1,D0
  5577.     ADD.W    #7524,D0
  5578.     MOVE.W    D0,TextOffset
  5579.     TST.W    AltKeyStatus
  5580.     BEQ.S    antpnot
  5581.     ADDQ.W    #4,D0
  5582.     MOVE.W    D0,TextOffset
  5583.     BRA.S    antpalt
  5584. antpnot    BSR    ShowText    ; Show notename
  5585.     BSR    PrintHiInstrNum
  5586. antpalt
  5587.     MOVE.W    CurrCmds,WordNumber
  5588.     BSR    PrintHexWord
  5589.     BSR    EditMoveDown
  5590. antpskip
  5591.     TST.W    DidQuantize
  5592.     BNE.S    testmul
  5593.     TST.W    CurrentPlayNote
  5594.     BNE    PlayNote
  5595. testmul    TST.B    MultiFlag
  5596.     BEQ    Return1
  5597. GotoNextMulti
  5598.     MOVEQ    #0,D0
  5599.     MOVE.W    PattCurPos,D0
  5600.     DIVU    #6,D0
  5601.     LEA    MultiModeNext,A0
  5602.     MOVE.B    (A0,D0.W),D0
  5603.     SUBQ.W    #1,D0
  5604.     AND.W    #3,D0
  5605.     MULU    #6,D0
  5606.     MOVE.W    D0,PattCurPos
  5607.     BRA    UpdateCursorPos
  5608.  
  5609. QuantizeCheck
  5610.     TST.L    RunMode
  5611.     BEQ.S    qcend
  5612.     MOVEQ    #0,D1
  5613.     MOVE.B    QuantizeValue,D1
  5614.     BEQ.S    qcend
  5615.     CMP.W    #1,D1
  5616.     BEQ.S    QuanOne
  5617.     MOVE.W    #1,DidQuantize
  5618.     MOVE.L    D1,D2
  5619.     LSR.W    #1,D2
  5620.     ADD.W    D0,D2
  5621.     AND.W    #$003F,D2
  5622.     DIVU    D1,D2
  5623.     MULU    D1,D2
  5624.     CMP.W    D0,D2
  5625.     BHI.S    qcskip
  5626.     CLR.W    DidQuantize
  5627. qcskip    MOVE.W    D2,D0
  5628.     RTS
  5629.  
  5630. QuanOne    MOVE.L    CurrSpeed,D1
  5631.     LSR.L    #1,D1
  5632.     CMP.L    Counter,D1
  5633.     BLS.S    QuantToNextNote
  5634. qcend    CLR.W    DidQuantize
  5635.     RTS    
  5636.  
  5637. QuantToNextNote
  5638.     ADDQ.W    #1,D0
  5639.     AND.W    #$003F,D0
  5640.     MOVE.W    #1,DidQuantize
  5641.     RTS
  5642.  
  5643. PlayNote
  5644.     CMP.W    #18,PattCurPos
  5645.     BNE.S    ChkChan3
  5646.     LEA    $DFF0D0,A5
  5647.     LEA    audchan4temp,A4
  5648.     BRA.S    DoPlayNote
  5649.  
  5650. ChkChan3
  5651.     CMP.W    #12,PattCurPos
  5652.     BNE.S    ChkChan2
  5653.     LEA    $DFF0C0,A5
  5654.     LEA    audchan3temp,A4
  5655.     BRA.S    DoPlayNote
  5656.  
  5657. ChkChan2
  5658.     CMP.W    #6,PattCurPos
  5659.     BNE.S    ChkChan1
  5660.     LEA    $DFF0B0,A5
  5661.     LEA    audchan2temp,A4
  5662.     BRA.S    DoPlayNote
  5663.  
  5664. ChkChan1
  5665.     TST.W    PattCurPos
  5666.     BNE    Return1
  5667.     LEA    $DFF0A0,A5
  5668.     LEA    audchan1temp,A4
  5669. DoPlayNote
  5670.     MOVE.L    A5,NoteAddr
  5671.     LEA    SampleInfo,A6
  5672.     MOVE.W    PlayInsNum,D0
  5673.     BEQ.S    dpnplay
  5674.     LSL.L    #2,D0
  5675.     LEA    SamplePtrs,A0
  5676.     LEA    SampleInfo2,A6
  5677.     MOVE.L    0(A0,D0.W),si_pointer2
  5678.     MOVE.L    SongDataPtr,A0
  5679.     LEA    -10(A0),A0
  5680.     MOVE.W    PlayInsNum,D0
  5681.     MOVE.B    D0,PlayInsNum2
  5682.     MULU    #30,D0
  5683.     ADD.L    D0,A0
  5684.     MOVE.L    22(A0),SampleInfo2
  5685.     MOVE.L    26(A0),si_long2
  5686. dpnplay    MOVE.B    PlayInsNum2,n_samplenum(A4)
  5687.     MOVE.W    4(A6),D0 ; repeat
  5688.     BNE.S    dpn2
  5689.     MOVE.W    (A6),D0  ; length
  5690.     BRA.S    dpn3
  5691. dpn2    ADD.W    6(A6),D0 ; add replen
  5692. dpn3    MOVEQ    #0,D1
  5693.     MOVE.B    3(A6),D1
  5694.     MOVE.W    D1,8(A5)        ; Set volume
  5695.     MOVE.B    D1,n_volume(A4)
  5696.     MOVE.W    CurrentPlayNote,6(A5)    ; Set period
  5697.     MOVE.W    CurrentPlayNote,n_period(A4)
  5698.     MOVE.W    n_dmabit(A4),$DFF096    ; Channel DMA off
  5699.     MOVE.L    8(A6),D1
  5700.     ADD.L    StartOfs,D1
  5701.     MOVE.L    D1,(A5)        ; Set sampledata pointer
  5702.     CLR.L    StartOfs
  5703.     MOVE.L    D1,n_start(A4)
  5704.     MOVE.W    D0,4(A5)        ; Set length
  5705.     MOVE.W    D0,n_length(A4)
  5706.     BNE.S    dpnnz
  5707.     MOVEQ    #1,D0
  5708.     MOVE.W    D0,4(A5)
  5709.     MOVE.W    D0,n_length(A4)
  5710. dpnnz    MOVE.W    CurrentPlayNote,D0
  5711.     BSR    PlayNoteAnalyze
  5712.     MOVE.W    DMAWait,D0
  5713. dpnolp1    DBRA    D0,dpnolp1
  5714.     MOVE.W    n_dmabit(A4),D0
  5715.     AND.W    ActiveChannels,D0
  5716.     OR.W    #$8000,D0
  5717.     MOVE.W    D0,$DFF096    ; Turn DMA back on
  5718.     MOVE.W    DMAWait,D0
  5719. dpnolp2    DBRA    D0,dpnolp2
  5720.     MOVEQ    #0,D1
  5721.     MOVE.W    4(A6),D1 ; repeat*2
  5722.     ADD.L    D1,D1
  5723.     ADD.L    8(A6),D1 ; + startptr
  5724.     MOVE.L    D1,(A5)    ; Set loop pointer
  5725.     MOVE.L    D1,n_loopstart(A4)
  5726.     MOVE.W    6(A6),4(A5)    ; Set loop length
  5727.     MOVE.W    6(A6),n_replen(A4)
  5728.     ST    n_trigger(A4)
  5729.     BRA    testmul
  5730.  
  5731. PlayInsNum2    dc.b 0,0
  5732.  
  5733. ;---- Check Cursor Arrow Keys ----
  5734.  
  5735. ArrowKeys
  5736.     CMP.B    #4,EnterTextFlag
  5737.     BEQ    Return1
  5738.     MOVE.B    RawKeyCode,D0
  5739.     TST.W    GetLineFlag
  5740.     BNE.S    arkeskip
  5741.     TST.W    ShiftKeyStatus
  5742.     BNE.S    arkeskip
  5743.     TST.W    AltKeyStatus
  5744.     BNE.S    arkeskip
  5745.     CMP.W    #2,CurrScreen
  5746.     BEQ.S    arkeskip
  5747.     CMP.B    #78,D0
  5748.     BEQ    RightArrow
  5749.     CMP.B    #79,D0
  5750.     BEQ    LeftArrow
  5751. arkeskip
  5752.     CMP.B    #76,D0
  5753.     BEQ.S    UpArrow
  5754.     CMP.B    #77,D0
  5755.     BEQ    DownArrow
  5756.     CLR.W    ArrowPressed
  5757.     RTS    
  5758.  
  5759. ArrowPressed    dc.w    0
  5760. ArrowRepCounter    dc.w    0
  5761.  
  5762. UpArrow    TST.L    RunMode
  5763.     BNE    Return1
  5764.     CMP.W    #2,CurrScreen
  5765.     BEQ    Return1
  5766.     CMP.W    #3,CurrScreen
  5767.     BEQ    Return1
  5768.     CMP.W    #4,CurrScreen
  5769.     BEQ    Return1
  5770.     CMP.W    #6,CurrScreen
  5771.     BEQ    Return1
  5772.     TST.W    ArrowPressed
  5773.     BEQ.S    MoveOneUp
  5774.     ADDQ.W    #1,ArrowRepCounter
  5775.     TST.W    AltKeyStatus
  5776.     BNE.S    AltUpArrow
  5777.     TST.W    ShiftKeyStatus
  5778.     BNE.S    ShiftUpArrow
  5779.     CMP.W    #6,ArrowRepCounter
  5780.     BPL.S    MoveOneUp
  5781.     RTS
  5782.  
  5783. ShiftUpArrow
  5784.     CMP.W    #3,ArrowRepCounter
  5785.     BPL.S    MoveOneUp
  5786.     RTS
  5787.  
  5788. AltUpArrow
  5789.     CMP.W    #1,ArrowRepCounter
  5790.     BPL.S    MoveOneUp
  5791.     RTS
  5792.  
  5793. MoveOneUp
  5794.     CLR.W    ArrowRepCounter
  5795.     MOVE.W    #$FFFF,ArrowPressed
  5796.     CMP.L    #'patt',RunMode
  5797.     BEQ    Return1
  5798.     SUBQ.W    #1,ScrPattPos
  5799.     AND.W    #$003F,ScrPattPos
  5800.     BRA    SetScrPatternPos
  5801.  
  5802. DownArrow
  5803.     TST.L    RunMode
  5804.     BNE    Return1
  5805.     CMP.W    #2,CurrScreen
  5806.     BEQ    Return1
  5807.     CMP.W    #3,CurrScreen
  5808.     BEQ    Return1
  5809.     CMP.W    #4,CurrScreen
  5810.     BEQ    Return1
  5811.     CMP.W    #6,CurrScreen
  5812.     BEQ    Return1
  5813.     TST.W    ArrowPressed
  5814.     BEQ.S    MoveOneDown
  5815.     ADDQ.W    #1,ArrowRepCounter
  5816.     TST.W    AltKeyStatus
  5817.     BNE.S    AltDownArrow
  5818.     TST.W    ShiftKeyStatus
  5819.     BNE.S    ShiftDownArrow
  5820.     CMP.W    #6,ArrowRepCounter
  5821.     BPL.S    MoveOneDown
  5822.     RTS
  5823.  
  5824. ShiftDownArrow
  5825.     CMP.W    #3,ArrowRepCounter
  5826.     BPL.S    MoveOneDown
  5827.     RTS    
  5828.  
  5829. AltDownArrow
  5830.     CMP.W    #1,ArrowRepCounter
  5831.     BPL.S    MoveOneDown
  5832.     RTS    
  5833.  
  5834. MoveOneDown
  5835.     CLR.W    ArrowRepCounter
  5836.     MOVE.W    #$FFFF,ArrowPressed
  5837.     TST.L    RunMode
  5838.     BNE    Return1
  5839.     ADDQ.W    #1,ScrPattPos
  5840.     AND.W    #$003F,ScrPattPos
  5841.     BRA    SetScrPatternPos
  5842.  
  5843. EditMoveDown
  5844.     TST.L    RunMode
  5845.     BNE    Return1
  5846.     MOVE.W    EditMoveAdd,D0
  5847.     ADD.W    D0,ScrPattPos
  5848.     AND.W    #$003F,ScrPattPos
  5849.     BRA    SetScrPatternPos
  5850.  
  5851. EditMoveAdd    dc.w 1
  5852.  
  5853. RightArrow
  5854.     TST.W    ArrowPressed
  5855.     BEQ.S    MoveOneRight
  5856.     ADDQ.W    #1,ArrowRepCounter
  5857.     CMP.W    #6,ArrowRepCounter
  5858.     BPL.S    MoveOneRight
  5859.     RTS    
  5860.  
  5861. PatternOneUp
  5862.     ADDQ.L    #1,PatternNumber
  5863.     AND.L    #$3F,PatternNumber
  5864.     BSR    Wait_4000
  5865.     BRA    RedrawPattern
  5866.  
  5867. MoveOneRight
  5868.     CLR.W    ArrowRepCounter
  5869.     MOVE.W    #$FFFF,ArrowPressed
  5870.     ADDQ.W    #1,PattCurPos
  5871.     CMP.W    #24,PattCurPos
  5872.     BMI.S    morskip
  5873.     CLR.W    PattCurPos
  5874. morskip    BRA.S    UpdateCursorPos
  5875.  
  5876. LeftArrow
  5877.     TST.W    ArrowPressed
  5878.     BEQ.S    MoveOneLeft
  5879.     ADDQ.W    #1,ArrowRepCounter
  5880.     CMP.W    #6,ArrowRepCounter
  5881.     BPL.S    MoveOneLeft
  5882.     RTS    
  5883.  
  5884. PatternOneDown
  5885.     SUBQ.L    #1,PatternNumber
  5886.     AND.L    #$3F,PatternNumber
  5887.     BSR    Wait_4000
  5888.     BRA    RedrawPattern
  5889.  
  5890. MoveOneLeft
  5891.     CLR.W    ArrowRepCounter
  5892.     MOVE.W    #$FFFF,ArrowPressed
  5893.     SUBQ.W    #1,PattCurPos
  5894.     TST.W    PattCurPos
  5895.     BPL    UpdateCursorPos
  5896.     MOVE.W    #23,PattCurPos
  5897. UpdateCursorPos
  5898.     TST.W    SamScrEnable
  5899.     BNE    Return1
  5900.     MOVE.W    PattCurPos,D0
  5901.     LEA    CursorPosTable,A0
  5902.     MOVE.B    0(A0,D0.W),D0
  5903.     LSL.W    #3,D0
  5904.     ADD.W    #9,D0
  5905.     MOVE.W    #$BD,D1
  5906.     MOVEQ    #14,D2 ; 14 lines
  5907.     LEA    CursorSpriteData,A0
  5908.     BRA    SetSpritePos
  5909.  
  5910. ArrowKeys2
  5911.     MOVE.B    RawKeyCode,D0
  5912.     CMP.B    #76,D0
  5913.     BEQ.S    UpArrow2
  5914.     CMP.B    #77,D0
  5915.     BEQ.S    DownArrow2
  5916.     CMP.B    #79,D0
  5917.     BEQ.S    LeftArrow2
  5918.     CMP.B    #78,D0
  5919.     BEQ    RightArrow2
  5920.     RTS
  5921.  
  5922. UpArrow2
  5923.     CMP.W    #2,CurrScreen
  5924.     BEQ    HelpUp
  5925.     CMP.W    #3,CurrScreen
  5926.     BEQ    FilenameOneUp
  5927.     CMP.W    #4,CurrScreen
  5928.     BEQ    PED_OneUp
  5929.     CMP.W    #6,CurrScreen
  5930.     BEQ    PLSTOneUp
  5931.     RTS
  5932.  
  5933. DownArrow2
  5934.     CMP.W    #2,CurrScreen
  5935.     BEQ    HelpDown
  5936.     CMP.W    #3,CurrScreen
  5937.     BEQ    FilenameOneDown
  5938.     CMP.W    #4,CurrScreen
  5939.     BEQ    PED_OneDown
  5940.     CMP.W    #6,CurrScreen
  5941.     BEQ    PLSTOneDown
  5942.     RTS
  5943.  
  5944. LeftArrow2
  5945.     TST.W    ShiftKeyStatus
  5946.     BNE    PositionDown
  5947.     TST.W    AltKeyStatus
  5948.     BNE    PatternOneDown
  5949.     TST.W    CtrlKeyStatus
  5950.     BNE    SampleNumDown
  5951.     CMP.W    #2,CurrScreen
  5952.     BEQ    HelpLeft
  5953.     RTS
  5954.  
  5955. RightArrow2
  5956.     TST.W    ShiftKeyStatus
  5957.     BNE    PositionUp
  5958.     TST.W    AltKeyStatus
  5959.     BNE    PatternOneUp
  5960.     TST.W    CtrlKeyStatus
  5961.     BNE    SampleNumUp
  5962.     CMP.W    #2,CurrScreen
  5963.     BEQ    HelpRight
  5964.     RTS
  5965.  
  5966. ;---- Update Line Cursor Position ----
  5967.  
  5968. UpdateLineCurPos
  5969.     MOVE.W    LineCurX,D0
  5970.     MOVE.W    LineCurY,D1
  5971.     SUBQ.W    #1,D0
  5972.     MOVEQ    #2,D2
  5973.     LEA    LineCurSpriteData,A0
  5974.     BRA    SetSpritePos
  5975.  
  5976. ;---- Check Gadgets ----
  5977.  
  5978. CheckGadgets
  5979.     BSR    UpdatePointerPos
  5980.     BSR.S    CheckGadgets2
  5981.     CLR.W    notogfl
  5982.     CMP.W    #$FFFF,GadgRepeat
  5983.     BEQ.S    CgRepeat
  5984.     MOVEQ    #0,D0
  5985. cgloop    ADDQ.L    #1,D0
  5986.     TST.B    HHFlag
  5987.     BEQ.S    cgnorma
  5988.     CMP.L    #40000*5,D0
  5989.     BEQ.S    CgRepeat
  5990.     BRA.S    cgnorm2
  5991. cgnorma    CMP.L    #40000,D0
  5992.     BEQ.S    CgRepeat
  5993. cgnorm2    BTST    #6,$BFE001
  5994.     BEQ.S    cgloop
  5995.     CLR.W    UpOrDown
  5996.     BRA    MainLoop
  5997.  
  5998. CgRepeat
  5999.     TST.B    HHFlag
  6000.     BEQ.S    cgrepe2
  6001.     BSR    Wait_4000
  6002. cgrepe2    MOVE.W    #$FFFF,GadgRepeat
  6003.     BTST    #6,$BFE001
  6004.     BEQ.S    CheckGadgets
  6005.     CLR.W    GadgRepeat
  6006.     CLR.W    UpOrDown
  6007.     BRA    MainLoop
  6008.  
  6009. CheckGadgets2
  6010.     MOVE.W    MouseX,MouseX2
  6011.     BNE.S    cgskip
  6012.     TST.W    MouseY
  6013.     BNE.S    cgskip
  6014. ChkQuit    LEA    QuitPTText,A0
  6015.     BSR    AreYouSure
  6016.     BEQ    ExitCleanup    ; Quit PT!
  6017.     RTS
  6018. cgskip    MOVE.W    MouseY,MouseY2
  6019.     CMP.W    #4,CurrScreen
  6020.     BEQ    CheckPresEdGadgs
  6021.     MOVE.W    MouseX2,D0
  6022.     MOVE.W    MouseY2,D1
  6023.     CMP.W    #122,D1
  6024.     BHS    WantedPattGadg
  6025.     CMP.W    #111,D1
  6026.     BHS    CheckSmplNamOrLoad
  6027.     CMP.W    #100,D1
  6028.     BHS    TypeInSongName
  6029.     CMP.W    #120,D0
  6030.     BLO.S    cgskip2
  6031.     CMP.W    #6,CurrScreen
  6032.     BEQ    CheckPLSTGadgs
  6033. cgskip2    CMP.W    #2,CurrScreen
  6034.     BEQ    Return1
  6035.     CMP.W    #3,CurrScreen    ; Screen 3 is DirScreen...
  6036.     BEQ    CheckDirGadgets
  6037.     CMP.W    #5,CurrScreen
  6038.     BEQ    CheckSetupGadgs
  6039.     CMP.W    #7,CurrScreen
  6040.     BEQ    CheckSetup2Gadgs
  6041.     CMP.W    #45,D1
  6042.     BHS.S    cgskip3
  6043.     CMP.W    #306,D0
  6044.     BHS    CheckToggle
  6045.     CMP.W    #244,D0
  6046.     BHS.S    MainMenu3
  6047.     CMP.W    #181,D0
  6048.     BHS.S    MainMenu2
  6049.     CMP.W    #120,D0
  6050.     BHS    MainMenu1
  6051. cgskip3    CMP.W    #120,D0
  6052.     BHS.S    cgskip4
  6053.     CMP.W    #109,D0
  6054.     BHS    DownGadgets
  6055.     CMP.W    #98,D0
  6056.     BHS    UpGadgets
  6057.     CMP.W    #62,D0
  6058.     BHS    EnterNumGadg
  6059.     BRA    PosInsDelGadgs
  6060. cgskip4    TST.B    EdEnable
  6061.     BNE    CheckEditOpGadgs
  6062.     BRA    ToggleAnaScope
  6063.  
  6064. MainMenu3
  6065.     MOVE.W    MouseY2,D0
  6066.     CMP.W    #34,D0
  6067.     BHS    DPMGFIH
  6068.     CMP.W    #23,D0
  6069.     BHS    Setup
  6070.     CMP.W    #12,D0
  6071.     BHS    PresetEditor
  6072.     TST.W    D0
  6073.     BHS    PLST
  6074.     RTS    
  6075.  
  6076. DPMGFIH    JMP    SamplerScreen
  6077.  
  6078. MainMenu2
  6079.     MOVE.W    MouseY2,D0
  6080.     CMP.W    #3,CurrScreen
  6081.     BNE    mm2skip
  6082.     CMP.W    #44,D0
  6083.     BHS    CheckDirGadgets2
  6084. mm2skip    CMP.W    #44,D0
  6085.     BHS    Return1
  6086.     CMP.W    #34,D0
  6087.     BHS    ShowDirScreen
  6088.     CMP.W    #23,D0
  6089.     BHS    DoEditOp
  6090.     CMP.W    #12,D0
  6091.     BHS    ClearAll
  6092.     TST.W    D0
  6093.     BHS    StopIt
  6094.     RTS    
  6095.  
  6096. MainMenu1
  6097.     MOVE.W    MouseY2,D0
  6098.     CMP.W    #3,CurrScreen
  6099.     BNE.S    mm1skip
  6100.     CMP.W    #44,D0
  6101.     BHS    CheckDirGadgets2
  6102. mm1skip    CMP.W    #44,D0
  6103.     BHS    Return1
  6104.     CMP.W    #34,D0
  6105.     BHS    RecordPattern
  6106.     CMP.W    #23,D0
  6107.     BHS    Edit
  6108.     CMP.W    #12,D0
  6109.     BHS    PlayPattern
  6110.     TST.W    D0
  6111.     BHS    PlaySong
  6112.     RTS
  6113.  
  6114.  
  6115. ;---- Disk Format ----
  6116.  
  6117. DiskFormatGadg
  6118.     BSR    WaitForButtonUp
  6119.     BSR    Wait_4000
  6120.     BSR    ClearFileNames
  6121.     BSR    SwapFormatBox
  6122.     BSR    WaitForButtonUp
  6123.     LEA    AreYouSureText,A0
  6124.     BSR    ShowStatusText
  6125. fmtbuttonchk
  6126.     BSR    DoKeyBuffer
  6127.     MOVE.B    RawKeyCode,D0
  6128.     CMP.B    #69,D0 ; ESC
  6129.     BEQ.S    fmtbend
  6130.     BTST    #6,$BFE001
  6131.     BNE.S    fmtbuttonchk
  6132.     MOVEM.W    MouseX,D0/D1
  6133.     CMP.W    #89,D0
  6134.     BLO.S    fmtbuttonchk
  6135.     CMP.W    #212,D0
  6136.     BHI.S    fmtbuttonchk
  6137.     CMP.W    #72,D1
  6138.     BLO.S    fmtbuttonchk
  6139.     CMP.W    #82,D1
  6140.     BHI.S    fmtbuttonchk
  6141.     CMP.W    #136,D0
  6142.     BLO.S    DiskFormat
  6143.     CMP.W    #166,D0
  6144.     BLO.S    fmtbuttonchk
  6145. fmtbend    BSR.S    SwapFormatBox
  6146.     BRA    SetErrorPtrCol
  6147.  
  6148. SwapFormatBox
  6149.     LEA    FormatBoxData,A1
  6150.     LEA    FormatBoxPos,A0
  6151.     MOVEQ    #38,D0
  6152. sfbloop1
  6153.     MOVEQ    #17,D1
  6154. sfbloop2
  6155.     MOVE.B    10240(A0),D2
  6156.     MOVE.B    702(A1),10240(A0)
  6157.     MOVE.B    D2,702(A1)
  6158.     MOVE.B    (A0),D2
  6159.     MOVE.B    (A1),(A0)+
  6160.     MOVE.B    D2,(A1)+
  6161.     DBRA    D1,sfbloop2
  6162.     LEA    $0016(A0),A0
  6163.     DBRA    D0,sfbloop1
  6164.     RTS
  6165.  
  6166. DiskFormat
  6167.     BSR    SwapFormatBox
  6168.     BSR    ShowAllRight
  6169.     BSR    ClearFileNames
  6170.     LEA    PlsEntNamText,A0
  6171.     MOVE.W    #2570,D1
  6172.     MOVEQ    #17,D0
  6173.     BSR    ShowText3
  6174.     LEA    OfVolumeText,A0
  6175.     MOVE.B    #'_',15(A0)
  6176.     MOVE.B    #'_',16(A0)
  6177.     MOVE.W    #2810,D1
  6178.     MOVEQ    #17,D0
  6179.     BSR    ShowText3
  6180.     BSR    SetWaitPtrCol
  6181.     LEA    DiskNumText1,A6
  6182.     MOVEQ    #1,D0
  6183. df_loop    CLR.B    0(A6,D0.W)
  6184.     DBRA    D0,df_loop
  6185.     MOVE.L    A6,TextEndPtr
  6186.     MOVE.L    A6,ShowTextPtr
  6187.     ADDQ.L    #2,TextEndPtr
  6188.     MOVE.B    #1,EnterTextFlag
  6189.     MOVE.W    #2825,A4
  6190.     MOVE.W    #2,TextLength
  6191.     BSR    GetTextLine
  6192.     CLR.B    EnterTextFlag
  6193.     CLR.L    TextEndPtr
  6194.     BSR    ClearFileNames
  6195.     MOVE.L    4.W,A6
  6196.     MOVE.L    #5632,D0
  6197.     MOVEQ    #MEMF_CHIP,D1
  6198.     JSR    LVOAllocMem(A6)
  6199.     MOVE.L    D0,FormatDataPtr
  6200.     BEQ    df_memerr
  6201.     BSR    DoShowFreeMem
  6202.     SUB.L    A1,A1
  6203.     JSR    LVOFindTask(A6)
  6204.     MOVE.L    D0,ProcessPtr
  6205.     LEA    TrackdiskPort,A1
  6206.     JSR    LVOAddPort(A6)
  6207.     LEA    TrackdiskIOExtTD,A1
  6208.     MOVEQ    #0,D0
  6209.     MOVEQ    #0,D1
  6210.     LEA    TrackdiskName,A0
  6211.     JSR    LVOOpenDevice(A6)
  6212.     MOVE.L    #TrackdiskPort,TDPortPtr
  6213.     CLR.W    CylinderNumber
  6214.     LEA    TrackdiskIOExtTD,A1
  6215.     MOVE.W    #TD_CHANGESTATE,IO_COMMAND(A1)
  6216.     JSR    LVODoIO(A6)    ; Check if disk in drive
  6217.     TST.L    IO_ACTUAL(A1)
  6218.     BEQ.S    df_indrive
  6219.     LEA    NoDiskInDriveText,A0
  6220.     BSR    ShowStatusText
  6221.     MOVE.W    #50,WaitTime
  6222.     BSR    SetErrorPtrCol
  6223.     BRA    df_cleanup
  6224.  
  6225. df_indrive
  6226.     LEA    TrackdiskIOExtTD,A1
  6227.     MOVE.W    #TD_PROTSTATUS,IO_COMMAND(A1)
  6228.     JSR    LVODoIO(A6)    ; Check write protect
  6229.     TST.L    IO_ACTUAL(A1)
  6230.     BEQ.S    df_noprot
  6231.     LEA    WriteProtectedText,A0
  6232.     BSR    ShowStatusText
  6233.     MOVE.W    #50,WaitTime
  6234.     BSR    SetErrorPtrCol
  6235.     BRA    df_cleanup
  6236.  
  6237. df_noprot
  6238.     LEA    DiskFormatText,A0
  6239.     MOVE.W    #2581-7,D1
  6240.     MOVEQ    #11,D0
  6241.     BSR    ShowText3
  6242.     LEA    InProgressText,A0
  6243.     MOVE.W    #2821-7,D1
  6244.     MOVEQ    #11,D0
  6245.     BSR    ShowText3
  6246.     CLR.L    FmtDiskOffset
  6247.     MOVE.L    FormatDataPtr,FmtDataPtr
  6248.     MOVE.L    #$00001600,FmtDataSize
  6249.     BSR    ClearCylinder
  6250.     BSR    SetDiskPtrCol
  6251. df_formatloop
  6252.     LEA    FormattingCylText,A0
  6253.     BSR    ShowStatusText
  6254.     MOVE.W    CylinderNumber,D0
  6255.     LSR.W    #1,D0
  6256.     MOVE.W    D0,WordNumber
  6257.     BSR    Print2DecDigits
  6258.     MOVE.L    4.W,A6
  6259.     LEA    TrackdiskIOExtTD,A1
  6260.     MOVE.W    #TD_FORMAT,IO_COMMAND(A1)
  6261.     JSR    LVODoIO(A6)    ; Format cylinder
  6262.     LEA    VerifyingText,A0
  6263.     BSR    ShowStatusText
  6264.     MOVE.W    CylinderNumber,D0
  6265.     LSR.W    #1,D0
  6266.     MOVE.W    D0,WordNumber
  6267.     BSR    Print2DecDigits
  6268.     MOVE.L    4.W,A6
  6269.     LEA    TrackdiskIOExtTD,A1
  6270.     MOVE.W    #CMD_READ,IO_COMMAND(A1)
  6271.     JSR    LVODoIO(A6)    ; Read cylinder to verify
  6272.     TST.B    Fmt_hmmm
  6273.     BEQ.S    df_verifyok
  6274.     LEA    VerifyErrText(PC),A0
  6275.     BSR    ShowStatusText
  6276.     MOVE.W    #50,WaitTime
  6277.     BSR    SetErrorPtrCol
  6278.     BRA    df_cleanup
  6279.  
  6280. VerifyErrText    dc.b "Verify error!",0
  6281.  
  6282. df_verifyok
  6283.     ADD.L    #$1600,FmtDiskOffset
  6284.     ADDQ.W    #1,CylinderNumber
  6285.     CMP.W    #160,CylinderNumber
  6286.     BNE    df_formatloop
  6287.  
  6288.     LEA    InitDiskText,A0
  6289.     BSR    ShowStatusText
  6290.     BSR    ClearCylinder
  6291.     MOVE.L    FormatDataPtr,A2
  6292.     LEA    BootblockData(PC),A0
  6293.     MOVEQ    #12,D0
  6294. .loop    MOVE.L    (A0)+,(A2)+
  6295.     DBRA    D0,.loop
  6296.     LEA    TrackdiskIOExtTD,A1
  6297.     CLR.L    IO_OFFSET(A1)
  6298.     MOVE.L    #512,IO_LENGTH(A1)
  6299.     MOVE.W    #CMD_WRITE,IO_COMMAND(A1)
  6300.     MOVE.L    4.W,A6
  6301.     JSR    LVODoIO(A6)    ; Write bootblock
  6302.     MOVE.L    #DateStamp,D1
  6303.     MOVE.L    DOSbase,A6
  6304.     JSR    LVODateStamp(A6)
  6305.     MOVE.L    4.W,A6
  6306.     BSR    ClearCylinder
  6307.     MOVE.L    FormatDataPtr,A2
  6308.     MOVE.W    #2,2(A2)
  6309.     MOVE.W    #$0048,14(A2)
  6310.     MOVE.L    #$FFFFFFFF,$0138(A2)
  6311.     MOVE.W    #$0371,$013E(A2)
  6312.     MOVE.L    #$0553542D,$01B0(A2)
  6313.     MOVE.W    DiskNumText1,$01B4(A2)
  6314.     MOVE.W    #$06F7,$01E2(A2)
  6315.     MOVE.W    #1,$01FE(A2)
  6316.     LEA    DateStamp,A0
  6317.     MOVE.L    (A0),D0
  6318.     MOVE.L    D0,$01A4(A2)
  6319.     MOVE.L    D0,$01E4(A2)
  6320.     MOVE.L    4(A0),D0
  6321.     MOVE.L    D0,$01A8(A2)
  6322.     MOVE.L    D0,$01E8(A2)
  6323.     MOVE.L    8(A0),D0
  6324.     MOVE.L    D0,$01AC(A2)
  6325.     MOVE.L    D0,$01EC(A2)
  6326.     MOVE.L    A2,A3
  6327.     MOVE.L    A3,A4
  6328.     MOVEQ    #$7F,D1
  6329.     MOVEQ    #0,D0
  6330.     MOVE.L    D0,$0014(A4)
  6331. df_loop2
  6332.     SUB.L    (A3)+,D0
  6333.     DBRA    D1,df_loop2
  6334.     MOVE.L    D0,$0014(A4)
  6335.     MOVE.L    #$C000C037,$0200(A2)
  6336.     LEA    $0204(A2),A3
  6337.     MOVEQ    #$36,D0
  6338. df_loop3
  6339.     MOVE.L    #$FFFFFFFF,(A3)+
  6340.     DBRA    D0,df_loop3
  6341.     MOVE.W    #$3FFF,$0272(A2)
  6342.     MOVE.W    #$3FFF,$02DC(A2)
  6343.     LEA    TrackdiskIOExtTD,A1
  6344.     MOVE.L    #$0006E000,IO_OFFSET(A1)
  6345.     MOVE.L    #1024,IO_LENGTH(A1)
  6346.     MOVE.W    #CMD_WRITE,IO_COMMAND(A1)
  6347.     JSR    LVODoIO(A6)
  6348.     LEA    TrackdiskIOExtTD,A1
  6349.     MOVE.W    #CMD_UPDATE,IO_COMMAND(A1)
  6350.     JSR    LVODoIO(A6)    ; Flush write buffer
  6351. df_cleanup
  6352.     LEA    TrackdiskIOExtTD,A1
  6353.     MOVE.W    #TD_MOTOR,IO_COMMAND(A1)
  6354.     CLR.L    IO_LENGTH(A1)
  6355.     JSR    LVODoIO(A6)    ; Turn off the motor
  6356.     MOVE.L    Fmt_tja,A0
  6357.     MOVE.L    $0024(A0),A0
  6358.     OR.B    #2,$0040(A0)
  6359.     LEA    TrackdiskIOExtTD,A1
  6360.     MOVE.L    4.W,A6
  6361.     JSR    LVOCloseDevice(A6)
  6362.     LEA    TrackdiskPort,A1
  6363.     JSR    LVORemPort(A6)
  6364.     MOVE.L    FormatDataPtr,A1
  6365.     MOVE.L    #5632,D0
  6366.     JSR    LVOFreeMem(A6)
  6367.     CMP.W    #160,CylinderNumber
  6368.     BNE.S    df_skip2
  6369.     CMP.W    #'00',DiskNumText1
  6370.     BNE.S    df_skip2
  6371.  
  6372.     MOVE.L    DOSbase,A6
  6373.     MOVE.L    #150,D1    ; Wait 3 sec
  6374.     JSR    LVODelay(A6)
  6375.  
  6376.     MOVE.L    #LockNameDF0,D1
  6377.     MOVE.L    #-2,D2
  6378.     JSR    LVOLock(A6)
  6379.     MOVE.L    D0,D6
  6380.     BEQ    df_skip3
  6381.     MOVE.L    D0,D1
  6382.     JSR    LVOCurrentDir(A6)
  6383.     MOVE.L    D0,D7
  6384.     MOVE.L    D6,D1
  6385.     JSR    LVOUnLock(A6)
  6386.  
  6387.     MOVE.L    #FmtSongDirName,D1
  6388.     JSR    LVOCreateDir(A6)
  6389.     MOVE.L    D0,D1
  6390.     BEQ.S    .err1
  6391.     JSR    LVOUnLock(A6)
  6392. .err1    MOVE.L    #FmtModuleDirName,D1
  6393.     JSR    LVOCreateDir(A6)
  6394.     MOVE.L    D0,D1
  6395.     BEQ.S    df_skip2
  6396.     JSR    LVOUnLock(A6)
  6397. df_skip2
  6398.     MOVE.L    D7,D1
  6399.     JSR    LVOCurrentDir(A6)
  6400. df_skip3
  6401.     BSR    SetNormalPtrCol
  6402.     BSR    ShowAllRight
  6403.     BSR    ClearFileNames
  6404.     MOVE.W    #1,UpdateFreeMem
  6405.     RTS    
  6406.  
  6407. df_memerr
  6408.     BSR    OutOfMemErr
  6409.     BRA.S    df_skip2
  6410.  
  6411. ClearCylinder
  6412.     MOVE.L    FormatDataPtr,A0
  6413.     MOVE.W    #1407,D0
  6414.     MOVEQ    #0,D1
  6415. ccloop    MOVE.L    D1,(A0)+
  6416.     DBRA    D0,ccloop
  6417.     RTS    
  6418.  
  6419. BootblockData
  6420.     dc.l    $444F5300,$c0200f19,$00000370,$43fa0018
  6421.     dc.l    $4eaeffa0,$4a80670a,$20402068,$00167000
  6422.     dc.l    $4e7570ff,$60fa646f,$732e6c69,$62726172
  6423.     dc.l    $79000000
  6424.  
  6425. LockNameDF0    dc.b    "df0:",0
  6426.     even
  6427.  
  6428.  
  6429. ;---- Clear All Data ----
  6430.  
  6431. ClearAll
  6432.     ADD.L    #1,LaHeTx
  6433.     MOVE.B    DisableAnalyzer,SaveDA
  6434.     MOVE.B    ScopeEnable,SaveScope
  6435.     SF    ScopeEnable
  6436.     LEA    PleaseSelectText,A0
  6437.     BSR    ShowStatusText
  6438.     BSR    StorePtrCol
  6439.     BSR    SetWaitPtrCol
  6440.     BSR    Wait_4000
  6441.     CMP    #1,CurrScreen
  6442.     BNE.S    clbskip
  6443.     TST.B    DisableAnalyzer
  6444.     BNE.S    clbskip
  6445.     ST     DisableAnalyzer
  6446.     BSR    ClearAnaHeights
  6447.     BSR    ClearRightArea
  6448. clbskip    LEA    ClearBoxData,A1
  6449.     BSR    SwapBoxMem
  6450.     BSR    WaitForButtonUp
  6451.     BSR    Wait_4000
  6452. clearbuttoncheck
  6453.     BTST    #2,$DFF016
  6454.     BEQ    ClrCancel
  6455.     BSR    DoKeyBuffer
  6456.     MOVE.B    RawKeyCode,D0
  6457.     CMP.B    #33,D0 ; Pressed S
  6458.     BEQ    ClrSamples
  6459.     CMP.B    #24,D0 ; Pressed O
  6460.     BEQ    ClrSong
  6461.     CMP.B    #32,D0 ; Pressed A
  6462.     BEQ    ClrAll
  6463.     CMP.B    #51,D0 ; Pressed C
  6464.     BEQ    ClrCancel
  6465.     CMP.B    #69,D0 ; Pressed Esc
  6466.     BEQ    ClrCancel
  6467.     BTST    #6,$BFE001    ; Left Mousebutton
  6468.     BNE.S    clearbuttoncheck
  6469.     MOVEM.W    MouseX,D0/D1
  6470.     CMP.W    #166,D0
  6471.     BLO.S    clearbuttoncheck
  6472.     CMP.W    #257,D0
  6473.     BHI.S    clearbuttoncheck
  6474.     CMP.W    #58,D1
  6475.     BLO.S    clearbuttoncheck
  6476.     CMP.W    #84,D1
  6477.     BHI.S    clearbuttoncheck
  6478.     CMP.W    #204,D0
  6479.     BHS.S    samporcancel
  6480.     CMP.W    #198,D0
  6481.     BLS.S    songorall
  6482.     BRA.S    clearbuttoncheck
  6483.  
  6484. songorall
  6485.     CMP.W    #74,D1
  6486.     BHS.S    ClrAll
  6487.     CMP.W    #68,D1
  6488.     BLS    ClrSong
  6489.     BRA    clearbuttoncheck
  6490.  
  6491. samporcancel
  6492.     CMP.W    #74,D1
  6493.     BHS.S    ClrCancel
  6494.     CMP.W    #68,D1
  6495.     BLS.S    ClrSamples
  6496.     BRA    clearbuttoncheck
  6497.  
  6498. RemoveClearBox
  6499.     LEA    ClearBoxData,A1
  6500.     BSR    SwapBoxMem
  6501.     BSR    ShowAllRight
  6502.     BSR    ClearAnaHeights
  6503.     MOVE.B    SaveDA,DisableAnalyzer
  6504.     MOVE.B    SaveScope,ScopeEnable
  6505.     BSR    RestorePtrCol
  6506.     CLR.B    RawKeyCode
  6507.     RTS
  6508.  
  6509. ClrCancel
  6510.     BSR.S    RemoveClearBox
  6511.     BRA    SetErrorPtrCol
  6512.  
  6513. ClrAll    BSR    DoClearSong
  6514.     BSR    ClrSampleInfo
  6515.     BSR    SetNormalPtrCol
  6516.     BSR.S    RemoveClearBox
  6517.     BRA    DisplayMainAll
  6518.  
  6519. ClrSamples
  6520.     BSR.S    RemoveClearBox
  6521.     BSR    StopIt
  6522.     BSR    ClrSampleInfo
  6523.     BSR    SetNormalPtrCol
  6524.     SF    EdEnable
  6525.     MOVE.W    #1,InsNum
  6526.     BRA    DisplayMainAll
  6527.  
  6528. ClrSong    BSR.S    RemoveClearBox
  6529.     BSR    DoClearSong
  6530.     BSR    SetNormalPtrCol
  6531.     BRA    DisplayMainAll
  6532.  
  6533. ClrSampleInfo
  6534.     BSR    GiveBackInstrMem
  6535.     MOVE.L    SongDataPtr,A0
  6536.     LEA    sd_sampleinfo(A0),A0
  6537.     MOVE.W    #31*30-1,D0
  6538. csiloop    CLR.B    (A0)+
  6539.     DBRA    D0,csiloop
  6540.     MOVE.L    SongDataPtr,A1
  6541.     LEA    sd_sampleinfo(A1),A1
  6542.     MOVEQ    #30,D0
  6543. caloop2    MOVE.W    #1,28(A1)
  6544.     LEA    30(A1),A1
  6545.     DBRA    D0,caloop2
  6546.     LEA    SampleLengthAdd(PC),A3
  6547.     MOVEQ    #31,D0
  6548. csilop2    CLR.W    (A3)+
  6549.     DBRA    D0,csilop2
  6550.     JMP    RedrawSample
  6551.  
  6552. DoClearSong
  6553.     BSR    StopIt
  6554.     CLR.B    RawKeyCode
  6555.     MOVE.L    SongDataPtr,A0
  6556.     MOVE.L    A0,A1
  6557.     MOVEQ    #19,D0
  6558. docla2x    CLR.B    (A0)+
  6559.     DBRA    D0,docla2x
  6560.     MOVE.L    A1,A2
  6561.     ADD.L    #70716,A2
  6562.     ADD.L    #950,A1
  6563.     MOVEQ    #0,D0
  6564. caloop    MOVE.W    D0,(A1)+
  6565.     CMP.L    A1,A2
  6566.     BNE.S    caloop
  6567.     MOVE.L    SongDataPtr,A0
  6568.     MOVE.W    #$017F,sd_numofpatt(A0)
  6569.     MOVE.L    #'M.K.',sd_mahokakt(A0)  ; M.K. all the way...
  6570.     SF    EdEnable
  6571.     CLR.L    CurrPos
  6572.     CLR.L    SongPosition
  6573.     CLR.L    PatternPosition
  6574.     CLR.L    PatternPtr
  6575.     CLR.L    TimerTicks
  6576.     CLR.W    BlockMarkFlag
  6577.     CLR.B    MetroChannel
  6578.     MOVE.W    #1,EditMoveAdd
  6579.     MOVEQ    #0,D0
  6580.     MOVE.W    DefaultSpeed,D0
  6581.     MOVE.L    D0,CurrSpeed
  6582.     MOVE.W    Tempo,RealTempo
  6583.     BSR    SetTempo
  6584.     BSR    RestoreEffects2
  6585.     BSR    RestoreFKeyPos2
  6586.     BSR    UnmuteAll
  6587.     MOVE.W    #1,InsNum
  6588.     MOVE.L    #6,CurrSpeed
  6589.     CLR.L    PatternNumber
  6590.     CLR.W    ScrPattPos
  6591.     BSR    SetScrPatternPos
  6592.     BRA    RedrawPattern
  6593.  
  6594. UnmuteAll
  6595.     MOVE.W    #1,audchan1toggle
  6596.     MOVE.W    #1,audchan2toggle
  6597.     MOVE.W    #1,audchan3toggle
  6598.     MOVE.W    #1,audchan4toggle
  6599.     MOVE.W    #$000F,ActiveChannels
  6600.     BRA    RedrawToggles
  6601.  
  6602. ToggleMute
  6603.     CLR.B    RawKeyCode
  6604.     TST.W    ShiftKeyStatus
  6605.     BEQ    tomuskp
  6606.     CLR.W    audchan1toggle
  6607.     CLR.W    audchan2toggle
  6608.     CLR.W    audchan3toggle
  6609.     CLR.W    audchan4toggle
  6610. tomuskp    MOVEQ    #0,D0
  6611.     MOVE.W    PattCurPos,D0
  6612.     DIVU    #6,D0
  6613.     MULU    #11,D0
  6614.     ADDQ.W    #4,D0
  6615.     BRA    DoToggleMute
  6616.  
  6617. RestoreEffects
  6618.     MOVEQ    #0,D0
  6619.     MOVE.W    DefaultSpeed,D0
  6620.     MOVE.L    D0,CurrSpeed
  6621.     MOVE.W    Tempo,RealTempo
  6622.     BSR    SetTempo
  6623.     BSR.S    RestoreEffects2
  6624.     CLR.B    RawKeyCode
  6625.     LEA    EfxRestoredText(PC),A0
  6626.     BSR    ShowStatusText
  6627.     BSR    WaitALittle
  6628.     BRA    ShowAllRight
  6629.  
  6630. RestoreEffects2
  6631.     LEA    audchan1temp,A0
  6632.     BSR.S    reefsub
  6633.     LEA    audchan2temp,A0
  6634.     BSR.S    reefsub
  6635.     LEA    audchan3temp,A0
  6636.     BSR.S    reefsub
  6637.     LEA    audchan4temp,A0
  6638. reefsub    CLR.B    n_wavecontrol(A0)
  6639.     CLR.B    n_glissfunk(A0)
  6640.     CLR.B    n_finetune(A0)
  6641.     CLR.B    n_loopcount(A0)
  6642.     RTS
  6643.  
  6644. RestoreFKeyPos
  6645.     CLR.B    RawKeyCode
  6646.     LEA    PosRestoredText(PC),A0
  6647.     BSR    ShowStatusText
  6648.     BSR    WaitALittle
  6649.     BSR    ShowAllRight
  6650. RestoreFKeyPos2
  6651.     MOVE.W    #00,F6pos
  6652.     MOVE.W    #16,F7pos
  6653.     MOVE.W    #32,F8pos
  6654.     MOVE.W    #48,F9pos
  6655.     MOVE.W    #63,F10pos
  6656.     RTS
  6657.  
  6658. EfxRestoredText    dc.b 'efx restored !',0
  6659. PosRestoredText    dc.b 'pos restored !',0
  6660.  
  6661.  
  6662. GiveBackInstrMem
  6663.     MOVEQ    #1,D7
  6664.     MOVE.L    4.W,A6
  6665. gbimloop
  6666.     MOVE.W    D7,D2
  6667.     LSL.W    #2,D2
  6668.     LEA    SamplePtrs,A0
  6669.     MOVE.L    0(A0,D2.W),D1
  6670.     BEQ.S    gbimskip
  6671.     MOVE.L    124(A0,D2.W),D0
  6672.     CLR.L    0(A0,D2.W)
  6673.     CLR.L    124(A0,D2.W)
  6674.     MOVE.L    D1,A1
  6675.     JSR    LVOFreeMem(A6)
  6676. gbimskip
  6677.     ADDQ.W    #1,D7
  6678.     CMP.W    #32,D7
  6679.     BNE.S    gbimloop
  6680.     MOVE.W    #1,UpdateFreeMem
  6681.     JMP    FreeCopyBuf
  6682.  
  6683. ;---- Setup ----
  6684.  
  6685. Setup    CMP.W    #7,LastSetupScreen
  6686.     BEQ    Setup2
  6687.     CLR.W    LastSetupScreen
  6688.     BSR    WaitForButtonUp
  6689.     MOVE.W    #5,CurrScreen
  6690.     ST    DisableAnalyzer
  6691.     ST    NoSampleInfo
  6692.     BSR    Clear100Lines
  6693.     BSR    ShowSetupScreen
  6694.     BEQ    ExitSetup
  6695. RefreshSetup
  6696.     BSR    SetScreenColors
  6697.     BSR    Show_MS
  6698.     CMP.W    #5,CurrScreen
  6699.     BNE    Return1
  6700.     BSR    MarkColor
  6701.     BSR    ShowSetupToggles
  6702.     BSR    ShowSplit
  6703.     BSR    ShowPrintPath
  6704.     BSR    ShowKeyRepeat
  6705.     BSR    ShowExtCommand
  6706.     BSR    ShowMultiSetup
  6707.     BSR    ShowConfigNumber
  6708.     BRA    ShowAccidental ; Always last (redraws pattern) !
  6709.  
  6710. ShowSetupScreen
  6711.     MOVE.L    SetupMemPtr,D0
  6712.     BNE    DecompactSetup
  6713.     BSR.S    SaveMainPic
  6714.     TST.L    SetupMemPtr
  6715.     BEQ    Return1
  6716.     BRA    DecompactSetup
  6717.  
  6718. SaveMainPic
  6719.     MOVE.L    #8000,D0
  6720.     MOVEQ    #0,D1
  6721.     MOVE.L    4.W,A6
  6722.     JSR    LVOAllocMem(A6)
  6723.     MOVE.L    D0,SetupMemPtr
  6724.     BEQ    OutOfMemErr
  6725.     MOVE.L    D0,A1
  6726.     LEA    BitplaneData,A0
  6727.     MOVEQ    #1,D2
  6728. sssloop1
  6729.     MOVE.W    #999,D0
  6730. sssloop2
  6731.     MOVE.L    (A0)+,(A1)+
  6732.     DBRA    D0,sssloop2
  6733.     LEA    6240(A0),A0
  6734.     DBRA    D2,sssloop1
  6735.     RTS    
  6736.  
  6737. RestoreMainPic
  6738.     MOVE.L    SetupMemPtr,D0
  6739.     BEQ    Return1
  6740.     MOVE.L    D0,A1
  6741.     LEA    BitplaneData,A0
  6742.     MOVEQ    #1,D2
  6743. ssxloop1
  6744.     MOVE.W    #999,D0
  6745. ssxloop2
  6746.     MOVE.L    (A1)+,(A0)+
  6747.     DBRA    D0,ssxloop2
  6748.     LEA    6240(A0),A0
  6749.     DBRA    D2,ssxloop1
  6750.     MOVE.L    SetupMemPtr,A1
  6751.     CLR.L    SetupMemPtr
  6752.     MOVE.L    #8000,D0
  6753.     MOVE.L    4.W,A6
  6754.     JSR    LVOFreeMem(A6)
  6755.     RTS    
  6756.  
  6757. SetupMemPtr    dc.l 0
  6758.  
  6759. DecompactSetup2
  6760.     LEA    Setup2Data+4,A0
  6761.     MOVE.L    #Setup2Size-4-8,D0
  6762.     BRA.S    decoset
  6763.  
  6764. DecompactSetup
  6765.     LEA    SetupScreenData+4,A0
  6766.     MOVE.L    #SetupScreenSize-4-8,D0
  6767. decoset    LEA    BitplaneData,A1
  6768.     MOVE.L    A1,A2
  6769.     LEA    4000(A2),A2
  6770. dcsloop    MOVE.B    (A0)+,D1
  6771.     CMP.B    #181,D1
  6772.     BEQ.S    DecodeIt2
  6773.     MOVE.B    D1,(A1)+
  6774.     CMP.L    A2,A1
  6775.     BLO.S    dcslop2
  6776.     LEA    6240(A1),A1
  6777.     MOVE.L    #$FFFFFFFF,A2
  6778. dcslop2    SUBQ.L    #1,D0
  6779.     CMP.L    #0,D0
  6780.     BGT.S    dcsloop
  6781.     MOVEQ    #-1,D0
  6782.     RTS
  6783.  
  6784. DecodeIt2
  6785.     MOVEQ    #0,D1
  6786.     MOVE.B    (A0)+,D1
  6787.     MOVE.B    (A0)+,D2
  6788. dcdlop2    MOVE.B    D2,(A1)+
  6789.     CMP.L    A2,A1
  6790.     BLO.S    dcdskp2
  6791.     LEA    6240(A1),A1
  6792.     MOVE.L    #$FFFFFFFF,A2
  6793. dcdskp2    DBRA    D1,dcdlop2
  6794.     SUBQ.L    #2,D0
  6795.     BRA.S    dcslop2
  6796.  
  6797. ; Gadgets
  6798.  
  6799. CheckSetupGadgs
  6800.     TST.L    SplitAddress
  6801.     BEQ.S    csgskip
  6802.     CLR.L    SplitAddress
  6803.     BSR    ShowSplit
  6804. csgskip    MOVEM.W    MouseX2,D0/D1
  6805.     CMP.W    #210,D0
  6806.     BHS    SetupMenu3
  6807.     CMP.W    #108,D0
  6808.     BHS.S    SetupMenu2
  6809. ;---- Menu 1 ----
  6810.     CMP.W    #11,D1
  6811.     BLS    LoadConfig
  6812.     CMP.W    #22,D1
  6813.     BLS    SaveConfig
  6814.     CMP.W    #33,D1
  6815.     BLS    ResetAll
  6816.     CMP.W    #44,D1
  6817.     BLS    ExtCommand
  6818.     CMP.W    #55,D1
  6819.     BLS    MultiSetup
  6820.     CMP.W    #66,D1
  6821.     BLS    SetRed
  6822.     CMP.W    #77,D1
  6823.     BLS    SetGreen
  6824.     CMP.W    #88,D1
  6825.     BLS    SetBlue
  6826.     CMP.W    #99,D1
  6827.     BLS    ColorGadgets
  6828.     RTS
  6829.  
  6830. SetupMenu2
  6831.     CMP.W    #11,D1
  6832.     BLS    Return1
  6833.     CMP.W    #55,D1
  6834.     BLS    SetSplit
  6835.     CMP.W    #66,D1
  6836.     BLS    SetKeyRepeat
  6837.     CMP.W    #77,D1
  6838.     BLS    ToggleAccidental
  6839.     CMP.W    #88,D1
  6840.     BLS    PrintSong
  6841.     CMP.W    #99,D1
  6842.     BLS    EnterPrintPath
  6843.     RTS
  6844.  
  6845. SetupMenu3
  6846.     CMP.W    #11,D1
  6847.     BLS.S    ExitOrClear
  6848.     CMP.W    #22,D1
  6849.     BLS    ToggleSplit
  6850.     CMP.W    #33,D1
  6851.     BLS    ToggleFilter
  6852.     CMP.W    #44,D1
  6853.     BLS    ToggleTransDel
  6854.     CMP.W    #55,D1
  6855.     BLS    ToggleShowDec
  6856.     CMP.W    #66,D1
  6857.     BLS    ToggleAutoDir
  6858.     CMP.W    #77,D1
  6859.     BLS    ToggleAutoExit
  6860.     CMP.W    #88,D1
  6861.     BLS    ToggleModOnly
  6862.     CMP.W    #99,D1
  6863.     BLS    ToggleMIDI
  6864.     RTS
  6865.  
  6866. ExitOrClear
  6867.     CMP.W    #265,D0
  6868.     BLS    ClearSplit
  6869.     CMP.W    #306,D0
  6870.     BHS    Setup2
  6871. ExitSetup
  6872.     BSR    WaitForButtonUp
  6873.     MOVE.W    CurrScreen,LastSetupScreen
  6874.     CLR.B    RawKeyCode
  6875.     CLR.L    SplitAddress
  6876.     BSR    RestoreMainPic
  6877.     SF    NoSampleInfo
  6878.     BSR    SetupVUCols
  6879.     BSR    SetupAnaCols
  6880.     BSR    Clear100Lines
  6881.     BRA    DisplayMainAll
  6882.  
  6883. LastSetupScreen    dc.w 0
  6884.  
  6885. ToggleSplit
  6886.     EOR.B    #1,SplitFlag
  6887.     BRA    ShowSetupToggles
  6888.  
  6889. ToggleFilter
  6890.     BCHG    #1,$BFE001
  6891.     BRA    ShowSetupToggles
  6892.  
  6893. ToggleTransDel
  6894.     EOR.B    #1,TransDelFlag
  6895.     BRA.S    ShowSetupToggles
  6896.  
  6897. ToggleShowDec
  6898.     EOR.B    #1,ShowDecFlag
  6899.     MOVE.W    #1,UpdateFreeMem
  6900.     BRA.S    ShowSetupToggles
  6901.  
  6902. ToggleAutoDir
  6903.     EOR.B    #1,AutoDirFlag
  6904.     BRA.S    ShowSetupToggles
  6905.  
  6906. ToggleAutoExit
  6907.     EOR.B    #1,AutoExitFlag
  6908.     BRA.S    ShowSetupToggles
  6909.  
  6910. ToggleModOnly
  6911.     EOR.B    #1,ModOnlyFlag
  6912.     LEA    FileNamesPtr(PC),A0
  6913.     CLR.L    4(A0)
  6914.     BRA.S    ShowSetupToggles
  6915.  
  6916. ToggleMIDI
  6917.     EOR.B    #1,MIDIFlag
  6918.     BSR.S    ShowSetupToggles
  6919. tstmidi    TST.B    MIDIFlag
  6920.     BNE    OpenMIDI
  6921.     BRA    CloseMIDI
  6922.  
  6923. ClearSplit
  6924.     BSR    WaitForButtonUp
  6925.     LEA    ClearSplitText,A0
  6926.     BSR    AreYouSure
  6927.     BNE    Return1
  6928.     LEA    SplitData,A0
  6929.     MOVEQ    #15,D0
  6930. clsploop
  6931.     CLR.B    (A0)+
  6932.     DBRA    D0,clsploop
  6933.     BRA    ShowSplit
  6934.  
  6935. ShowSetupToggles
  6936.     CLR.B    RawKeyCode
  6937.     BSR    Show_MS
  6938.     CMP.W    #5,CurrScreen
  6939.     BNE    Return1
  6940.     MOVE.B    $BFE001,D0
  6941.     LSR.B    #1,D0
  6942.     AND.B    #1,D0
  6943.     EOR.B    #1,D0
  6944.     MOVE.B    D0,FilterFlag
  6945.     LEA    SplitFlag,A4
  6946.     MOVE.W    #3,TextLength
  6947.     MOVEQ    #7,D7
  6948.     MOVE.W    #636,D6
  6949. sstloop
  6950.     MOVE.W    D6,TextOffset
  6951.     LEA    ToggleOFFText(PC),A0
  6952.     TST.B    (A4)+
  6953.     BEQ.S    sstskip
  6954.     LEA    ToggleONText(PC),A0
  6955. sstskip
  6956.     BSR    ShowText2
  6957.     ADD.W    #440,D6
  6958.     DBRA    D7,sstloop
  6959.     BRA    WaitForButtonUp
  6960.  
  6961. ToggleONText2    dc.b ' '
  6962. ToggleONText    dc.b 'on '
  6963. ToggleOFFText    dc.b 'off '
  6964.  
  6965. ShowSplit
  6966.     BSR    CalculateSplit
  6967.     CMP.W    #5,CurrScreen
  6968.     BNE    Return1
  6969.     LEA    SplitData,A3
  6970.     MOVE.L    NoteNamesPtr,A4
  6971.     MOVEQ    #0,D5
  6972.     MOVE.W    #614,D6
  6973.     CLR.W    WordNumber
  6974. shsploop
  6975.     MOVE.W    D6,TextOffset
  6976.     MOVE.B    (A3,D5.W),WordNumber+1 ; instr
  6977.     BSR    PrintHexByte
  6978.     ADDQ.W    #4,D6
  6979.     MOVE.W    D6,D1
  6980.     MOVEQ    #0,D0
  6981.     MOVE.B    1(A3,D5.W),D0 ; note
  6982.     LSL.W    #2,D0
  6983.     LEA    (A4,D0.W),A0
  6984.     MOVEQ    #4,D0
  6985.     BSR    ShowText3
  6986.     ADDQ.L    #5,D6
  6987.     MOVE.W    D6,D1
  6988.     MOVEQ    #0,D0
  6989.     MOVE.B    2(A3,D5.W),D0 ; trans
  6990.     LSL.W    #2,D0
  6991.     LEA    (A4,D0.W),A0
  6992.     MOVEQ    #4,D0
  6993.     BSR    ShowText3
  6994.     ADD.W    #431,D6
  6995.     ADDQ.W    #4,D5
  6996.     CMP.W    #16,D5
  6997.     BNE.S    shsploop
  6998.     RTS
  6999.  
  7000. CalculateSplit
  7001.     LEA    SplitTransTable,A0
  7002.     LEA    SplitInstrTable,A1
  7003.     LEA    SplitData,A2
  7004.     MOVEQ    #0,D0
  7005. casploop
  7006.     MOVE.B    D0,(A0,D0.W)
  7007.     CLR.B    (A1,D0.W)
  7008.     ADDQ.W    #1,D0
  7009.     CMP.W    #37,D0
  7010.     BLS.S    casploop
  7011.  
  7012.     MOVE.B    1(A2),-(SP)
  7013.     MOVE.B    1+4(A2),-(SP)
  7014.     MOVE.B    1+8(A2),-(SP)
  7015.     MOVE.B    1+12(A2),-(SP) ; note
  7016.  
  7017.     MOVEQ    #3,D4
  7018. caspbigloop
  7019.     MOVEQ    #127,D0
  7020.     MOVEQ    #0,D1
  7021.     MOVEQ    #0,D2
  7022. casploop2
  7023.     CMP.B    1(A2,D1.W),D0 ; note
  7024.     BLS.S    caspskip
  7025.     MOVE.L    D1,D2
  7026.     MOVE.B    1(A2,D1.W),D0 ; note
  7027. caspskip
  7028.     ADDQ.W    #4,D1
  7029.     CMP.W    #16,D1
  7030.     BNE.S    casploop2
  7031.  
  7032.     MOVEQ    #0,D0
  7033.     MOVE.B    1(A2,D2.W),D0 ; note
  7034.     MOVE.B    #127,1(A2,D2.W) ; note
  7035.     MOVE.B    2(A2,D2.W),D1 ; trans
  7036. casploop3
  7037.     MOVE.B    D1,(A0,D0.W)
  7038.     MOVE.B    (A2,D2.W),(A1,D0.W) ; instr
  7039.     ADDQ.W    #1,D1
  7040.     CMP.W    #36,D1
  7041.     BLO.S    caspskip2
  7042.     MOVEQ    #35,D1
  7043. caspskip2
  7044.     ADDQ.W    #1,D0
  7045.     CMP.W    #36,D0
  7046.     BLO.S    casploop3
  7047.     DBRA    D4,caspbigloop
  7048.     
  7049.     MOVE.B    (SP)+,1+12(A2)
  7050.     MOVE.B    (SP)+,1+8(A2)
  7051.     MOVE.B    (SP)+,1+4(A2)
  7052.     MOVE.B    (SP)+,1(A2) ; note
  7053.     RTS
  7054.  
  7055. SetSplit
  7056.     LEA    SplitData,A2
  7057.     SUBQ.W    #1,D1
  7058.     DIVU    #11,D1
  7059.     SUBQ.W    #1,D1
  7060.     MOVE.W    D1,D7
  7061.     LSL.W    #2,D7
  7062.     MULU    #440,D1
  7063.     ADD.W    #600,D1
  7064.     CMP.W    #176,D0
  7065.     BHS.S    SetSplitTranspose
  7066.     CMP.W    #136,D0
  7067.     BHS.S    SetSplitNote
  7068.     ADD.W    #14,D1
  7069.     MOVE.W    D1,TextOffset
  7070.     BSR    GetHexByte
  7071.     CMP.B    #$1F,D0
  7072.     BLS.S    setskip
  7073.     MOVE.B    #$1F,D0
  7074. setskip    MOVE.B    D0,(A2,D7.W) ; instr
  7075.     BRA    ShowSplit
  7076.  
  7077. SetSplitNote
  7078.     MOVE.L    D1,-(SP)
  7079.     BSR    ShowSplit
  7080.     MOVE.L    (SP)+,D1
  7081.     ADD.W    #18,D1
  7082.     MOVEQ    #3,D0
  7083.     LEA    SpcNoteText,A0
  7084.     BSR    ShowText3
  7085.     LEA    1(A2,D7.W),A0 ; note
  7086.     MOVE.L    A0,SplitAddress
  7087.     BRA    WaitForButtonUp
  7088.  
  7089. SetSplitTranspose
  7090.     MOVE.L    D1,-(SP)
  7091.     BSR    ShowSplit
  7092.     MOVE.L    (SP)+,D1
  7093.     ADD.W    #23,D1
  7094.     MOVEQ    #3,D0
  7095.     LEA    SpcNoteText,A0
  7096.     BSR    ShowText3
  7097.     LEA    2(A2,D7.W),A0 ; trans
  7098.     MOVE.L    A0,SplitAddress
  7099.     BRA    WaitForButtonUp
  7100.  
  7101. SetKeyRepeat
  7102.     CMP.W    #188,D0
  7103.     BHS.S    skrep2
  7104.     MOVE.W    #2381,TextOffset
  7105.     BSR    GetHexByte
  7106.     MOVE.B    D0,KeyRepDelay+1
  7107.     BRA.S    ShowKeyRepeat
  7108. skrep2    MOVE.W    #2384,TextOffset
  7109.     BSR    GetHexByte
  7110.     MOVE.B    D0,KeyRepSpeed+1
  7111. ShowKeyRepeat
  7112.     MOVE.W    #2381,TextOffset
  7113.     MOVE.W    KeyRepDelay,WordNumber
  7114.     BSR    PrintHexByte
  7115.     ADDQ.W    #1,TextOffset
  7116.     MOVE.W    KeyRepSpeed,WordNumber
  7117.     BRA    PrintHexByte
  7118.  
  7119. ToggleAccidental
  7120.     MOVE.L    #NoteNames1,NoteNamesPtr
  7121.     EOR.B    #1,Accidental
  7122.     BEQ.S    ShowAccidental
  7123.     MOVE.L    #NoteNames2,NoteNamesPtr
  7124. ShowAccidental
  7125.     LEA    AccidentalText(PC),A0
  7126.     TST.B    Accidental
  7127.     BEQ.S    shacskp
  7128.     LEA    AccidentalText+1(PC),A0
  7129. shacskp    MOVEQ    #1,D0
  7130.     MOVE.W    #2824,D1
  7131.     BSR    ShowText3
  7132.     BRA    RedrawPattern
  7133.  
  7134. AccidentalText    dc.b '#¡'
  7135.  
  7136. LoadConfig
  7137.     CMP.W    #84,D0
  7138.     BHS    SetConfigNumber
  7139.     LEA    LoadConfigText,A0
  7140.     BSR    AreYouSure
  7141.     BNE    Return1
  7142.     BSR    WaitForButtonUp
  7143.     LEA    LoadingCfgText(PC),A0
  7144.     BSR    ShowStatusText
  7145. DoLoadConfig
  7146.     BSR    StorePtrCol
  7147.     BSR    PutConfigNumber
  7148.     MOVE.L    #Configname,D1
  7149.     MOVE.L    #1005,D2
  7150.     MOVE.L    DOSbase,A6
  7151.     JSR    LVOOpen(A6)
  7152.     MOVE.L    D0,D7
  7153.     BNE.S    cfgopok
  7154.     LEA    PTPath,A0
  7155.     BSR    CopyPath
  7156.     LEA    ConfigName(PC),A0
  7157.     MOVEQ    #12,D0
  7158. cfgnlop    MOVE.B    (A0)+,(A1)+
  7159.     DBRA    D0,cfgnlop
  7160.     MOVE.L    #FileName,D1
  7161.     MOVE.L    #1005,D2
  7162.     MOVE.L    DOSbase,A6
  7163.     JSR    LVOOpen(A6)
  7164.     MOVE.L    D0,D7
  7165.     BEQ.S    ConfigErr
  7166. cfgopok    BSR    SetDiskPtrCol
  7167.     MOVE.L    D7,D1
  7168.     CLR.L    ConfigID
  7169.     MOVE.L    #ConfigID,D2
  7170.     MOVE.L    #4,D3
  7171.     JSR    LVORead(A6)
  7172.     CMP.L    #"PT1.",ConfigID
  7173.     BNE.S    cfgerr2
  7174.     LEA    SetupData+4,A0
  7175.     MOVE.L    D7,D1
  7176.     MOVE.L    A0,D2
  7177.     MOVE.L    #ConfigFileSize-4,D3
  7178.     JSR    LVORead(A6)
  7179. lcfgend    MOVE.L    D7,D1
  7180.     JSR    LVOClose(A6)
  7181.     BSR    ShowAllRight
  7182.     BSR    RestorePtrCol
  7183. cfgupda    BSR    CopyCfgData
  7184.     BSR    tstmidi
  7185.     BSR    ChangeCopList
  7186.     BRA    RefreshSetup
  7187.  
  7188. ConfigErr
  7189.     BSET    #2,InitError
  7190.     LEA    FileNotFoundText(PC),A0
  7191. cferr    BSR    ShowStatusText
  7192.     MOVE.W    #50,WaitTime
  7193.     BRA    ErrorRestoreCol
  7194.  
  7195. cfgerr2    BSR.S    ConfigErr2
  7196.     BRA.S    lcfgend
  7197.  
  7198. ConfigErr2
  7199.     BSET    #3,InitError
  7200.     LEA    NotAConfFileText(PC),A0
  7201.     BRA.S    cferr
  7202.  
  7203. ConfigErr3
  7204.     LEA    CantCreateFiText(PC),A0
  7205.     BRA.S    cferr
  7206.  
  7207. FileNotFoundText dc.b "config not found!",0
  7208. NotAConfFileText dc.b "not a config file",0
  7209. CantCreateFiText dc.b "can't create file",0
  7210.  
  7211. SaveConfig
  7212.     CMP.W    #84,D0
  7213.     BHS    SetConfigNumber
  7214.     LEA    SaveConfigText,A0
  7215.     BSR    AreYouSure
  7216.     BNE    Return1
  7217.     BSR    StorePtrCol
  7218.     BSR    SetDiskPtrCol
  7219.     BSR    PutConfigNumber
  7220.     LEA    SavingCfgText(PC),A0
  7221.     BSR    ShowStatusText
  7222.     MOVE.L    DOSbase,A6
  7223.     LEA    PTPath,A0
  7224.     BSR    CopyPath
  7225.     LEA    ConfigName(PC),A0
  7226.     MOVEQ    #12,D0
  7227. cfgllop    MOVE.B    (A0)+,(A1)+
  7228.     DBRA    D0,cfgllop
  7229.     MOVE.L    #FileName,D1
  7230.     MOVE.L    #1006,D2
  7231.     JSR    LVOOpen(A6)
  7232.     MOVE.L    D0,D7
  7233.     BEQ    ConfigErr3
  7234.     MOVE.L    D0,D1
  7235.     MOVE.L    #SetupData,D2
  7236.     MOVE.W    #ConfigFileSize,D3
  7237.     JSR    LVOWrite(A6)
  7238.     MOVE.L    D7,D1
  7239.     JSR    LVOClose(A6)
  7240.     BSR    ShowAllRight
  7241.     BRA    RestorePtrCol
  7242.  
  7243. SetConfigNumber
  7244.     MOVE.W    #611,TextOffset
  7245.     BSR    GetHexByte
  7246.     MOVE.W    D0,ConfigNumber
  7247. ShowConfigNumber
  7248.     MOVE.W    #611,TextOffset
  7249.     MOVE.W    ConfigNumber(PC),WordNumber
  7250.     BRA    PrintHexByte
  7251.  
  7252. PutConfigNumber
  7253.     MOVE.W    ConfigNumber(PC),D0
  7254.     LEA    ConfigName+12(PC),A0
  7255.     BRA    IntToHex2
  7256.  
  7257. ConfigName    dc.b 'PT.config-00',0,0
  7258. ConfigNumber    dc.w 0
  7259. LoadingCfgText    dc.b 'loading config',0
  7260. SavingCfgText    dc.b 'saving config',0,0
  7261. ConfigID    dc.l 0
  7262.  
  7263. ResetAll
  7264.     LEA    ResetAllText,A0
  7265.     BSR    AreYouSure
  7266.     BNE    Return1
  7267. DoResetAll
  7268.     LEA    DefaultSetupData,A0
  7269.     LEA    SetupData,A1
  7270.     MOVE.W    #ConfigFileSize-1,D0
  7271. rsaloop    MOVE.B    (A0)+,(A1)+
  7272.     DBRA    D0,rsaloop
  7273.     BRA    RefreshSetup
  7274.  
  7275. ExtCommand
  7276.     CMP.W    #11,D0
  7277.     BLO.S    excolab
  7278.     BSR    StorePtrCol
  7279.     BSR    SetWaitPtrCol
  7280.     LEA    ExtCommands,A6
  7281.     MOVE.W    ExtCmdNumber,D1
  7282.     MULU    #32,D1
  7283.     ADD.L    D1,A6
  7284.     MOVE.L    A6,ShowTextPtr
  7285.     MOVE.L    A6,TextEndPtr
  7286.     ADD.L    #31,TextEndPtr
  7287.     MOVE.W    #11,TextLength
  7288.     MOVE.W    #1482,A4
  7289.     BSR    GetTextLine
  7290.     BRA    RestorePtrCol
  7291.  
  7292. ShowExtCommand
  7293.     LEA    ExtCommands,A0
  7294.     MOVE.W    ExtCmdNumber,D1
  7295.     MULU    #32,D1
  7296.     ADD.L    D1,A0
  7297.     MOVEQ    #11,D0
  7298.     MOVE.W    #1482,D1
  7299.     BRA    ShowText3
  7300.  
  7301. excolab    BTST    #2,$DFF016
  7302.     BEQ.S    excorun
  7303.     ADDQ.W    #1,ExtCmdNumber
  7304.     AND.W    #7,ExtCmdNumber
  7305.     BSR.S    ShowExtCommand
  7306.     BSR    Wait_4000
  7307.     BSR    Wait_4000
  7308.     BSR    Wait_4000
  7309.     BRA    Wait_4000
  7310.  
  7311. excorun    LEA    ExtCommands,A0
  7312.     MOVE.W    ExtCmdNumber,D1
  7313.     MULU    #32,D1
  7314.     ADD.L    D1,A0
  7315.     TST.B    (A0)
  7316.     BEQ    Return1
  7317.     MOVE.L    A0,ExtCmdAddress
  7318.     MOVE.L    IntuitionBase,A6
  7319.     JSR    LVOOpenWorkbench(A6)
  7320.     JSR    LVOWBenchToFront(A6)
  7321.     MOVE.L    #ExtCmdConsole,D1
  7322.     MOVE.L    #1005,D2
  7323.     MOVE.L    DOSBase,A6
  7324.     JSR    LVOOpen(A6)
  7325.     MOVE.L    D0,ExtCmdWindow
  7326.     BEQ.S    winderr
  7327.     LSL.L    #2,D0
  7328.     MOVE.L    D0,A0
  7329.     MOVE.L    PTProcess,A1
  7330.     MOVE.L    8(A0),$A4(A1)
  7331.     BSR    GotoCLI
  7332.     MOVE.L    ExtCmdWindow,D1
  7333.     BEQ    Return1
  7334.     MOVE.L    DOSBase,A6
  7335.     JSR    LVOClose(A6)
  7336.     CLR.L    ExtCmdWindow
  7337.     RTS
  7338.  
  7339. winderr    LEA    ConsoleErrText,A0
  7340.     BSR    ShowStatusText
  7341.     BRA    SetErrorPtrCol
  7342.  
  7343. ExtCmdNumber    dc.w 0
  7344. ExtCmdAddress    dc.l 0
  7345. ExtCmdWindow    dc.l 0
  7346. ExtCmdConsole    dc.b "CON:0/0/640/150/Protracker Output Window",0
  7347. ConsoleErrText    dc.b "Can't open window",0,0
  7348.  
  7349. MultiSetup
  7350.     CMP.W    #44,D0
  7351.     BLO    Return1
  7352.     BSR    StorePtrCol
  7353.     BSR    SetWaitPtrCol
  7354.     MOVE.W    #1,GetLineFlag
  7355.     SUB.W    #44,D0
  7356.     LSR.W    #4,D0
  7357.     MOVE.B    D0,musepos
  7358. museset    MOVEQ    #0,D0
  7359.     MOVE.B    musepos,D0
  7360.     MOVE.L    D0,D1
  7361.     LSL.W    #4,D1
  7362.     MOVE.W    #52,LineCurX
  7363.     MOVE.W    #53,LineCurY
  7364.     ADD.W    D1,LineCurX
  7365.     LEA    MultiModeNext,A1
  7366.     LEA    (A1,D0.W),A1
  7367.     BSR    UpdateLineCurPos
  7368. muselop    BSR    GetHexKey
  7369.     TST.B    D1
  7370.     BEQ.S    musenul
  7371.     CMP.B    #4,D1
  7372.     BHI.S    muselop
  7373.     MOVE.B    D1,(A1)
  7374.     BSR    ShowMultiSetup
  7375.     MOVEQ    #1,D0
  7376. musenul    TST.B    D0
  7377.     BEQ.S    museabo
  7378.     ADD.B    D0,musepos
  7379.     AND.B    #3,musepos
  7380.     BSR    Wait_4000
  7381.     BSR    Wait_4000
  7382.     BSR    Wait_4000
  7383.     BRA.S    museset
  7384.  
  7385. museabo    BSR    RestorePtrCol
  7386.     CLR.W    GetLineFlag
  7387.     MOVE.W    #0,LineCurX
  7388.     MOVE.W    #270,LineCurY
  7389.     BSR    UpdateLineCurPos
  7390. ShowMultiSetup
  7391.     MOVE.W    #1926,TextOffset
  7392.     MOVE.B    MultiModeNext,D0
  7393.     BSR    PrintHexDigit
  7394.     MOVE.W    #1928,TextOffset
  7395.     MOVE.B    MultiModeNext+1,D0
  7396.     BSR    PrintHexDigit
  7397.     MOVE.W    #1930,TextOffset
  7398.     MOVE.B    MultiModeNext+2,D0
  7399.     BSR    PrintHexDigit
  7400.     MOVE.W    #1932,TextOffset
  7401.     MOVE.B    MultiModeNext+3,D0
  7402.     BRA    PrintHexDigit
  7403.  
  7404. musepos    dc.b 0,0
  7405.  
  7406. SetRed    CMP.W    #82,D0
  7407.     BHS    SelectColor
  7408. setr2    BSR    GetColPos
  7409.     AND.W    #$0F00,D2
  7410.     LSR.W    #8,D2
  7411.     CMP.B    D2,D0
  7412.     BEQ.S    setrskp
  7413.     AND.W    #$00FF,D1
  7414.     LSL.W    #8,D0
  7415.     OR.W    D0,D1
  7416.     MOVE.W    D1,(A0)
  7417.     BSR    ShowColSliders
  7418.     BSR    SetScreenColors
  7419. setrskp    BTST    #6,$BFE001
  7420.     BEQ.S    setr2
  7421.     RTS
  7422.  
  7423. SetGreen
  7424.     CMP.W    #82,D0
  7425.     BHS    SelectColor
  7426. setg2    BSR.S    GetColPos
  7427.     AND.W    #$00F0,D2
  7428.     LSR.W    #4,D2
  7429.     CMP.B    D2,D0
  7430.     BEQ.S    setgskp
  7431.     AND.W    #$0F0F,D1
  7432.     LSL.W    #4,D0
  7433.     OR.W    D0,D1
  7434.     MOVE.W    D1,(A0)
  7435.     BSR    ShowColSliders
  7436.     BSR    SetScreenColors
  7437. setgskp    BTST    #6,$BFE001
  7438.     BEQ.S    setg2
  7439.     RTS
  7440.  
  7441. SetBlue    CMP.W    #82,D0
  7442.     BHS    SelectColor
  7443. setb2    BSR.S    GetColPos
  7444.     AND.W    #$000F,D2
  7445.     CMP.B    D2,D0
  7446.     BEQ.S    setbskp
  7447.     AND.W    #$0FF0,D1
  7448.     OR.W    D0,D1
  7449.     MOVE.W    D1,(A0)
  7450.     BSR    ShowColSliders
  7451.     BSR    SetScreenColors
  7452. setbskp    BTST    #6,$BFE001
  7453.     BEQ.S    setb2
  7454.     RTS
  7455.  
  7456. GetColPos
  7457.     MOVEQ    #0,D0
  7458.     MOVE.W    MouseX,D0
  7459.     CMP.W    #26,D0
  7460.     BHS.S    gcpskp2
  7461.     MOVEQ    #0,D0
  7462.     BRA.S    gcpskip
  7463. gcpskp2    SUB.W    #26,D0
  7464.     DIVU    #3,D0
  7465.     AND.L    #$FF,D0
  7466.     CMP.W    #15,D0
  7467.     BLS.S    gcpskip
  7468.     MOVEQ    #15,D0
  7469. gcpskip    CMP.W    #7,CurrScreen
  7470.     BEQ    GetColAddr
  7471.     LEA    ColorTable,A0
  7472.     MOVE.W    CurrColor,D1
  7473.     ADD.W    D1,D1
  7474.     LEA    (A0,D1.W),A0
  7475.     MOVE.W    (A0),D1
  7476.     MOVE.W    D1,D2
  7477.     RTS
  7478.  
  7479. ShowColSliders
  7480.     LEA    ColSliders(PC),A2
  7481.     MOVE.L    TextBplPtr,A1
  7482.     ADD.L    #3282,A1
  7483.     BSR.S    gcpskip
  7484.     AND.W    #$000F,D1
  7485.     BSR.S    ShowOneSlider
  7486.     MOVE.L    TextBplPtr,A1
  7487.     ADD.L    #2842,A1
  7488.     BSR.S    gcpskip
  7489.     AND.W    #$00F0,D1
  7490.     LSR.W    #4,D1
  7491.     BSR.S    ShowOneSlider
  7492.     MOVE.L    TextBplPtr,A1
  7493.     ADD.L    #2402,A1
  7494.     BSR.S    gcpskip
  7495.     AND.W    #$0F00,D1
  7496.     LSR.W    #8,D1
  7497. ShowOneSlider
  7498.     CLR.L    (A1)
  7499.     CLR.L    4(A1)
  7500.     CLR.L    40(A1)
  7501.     CLR.L    44(A1)
  7502.     CLR.L    80(A1)
  7503.     CLR.L    84(A1)
  7504.     MOVE.W    D1,D3
  7505.     ADD.W    D3,D3
  7506.     ADD.W    D3,D3
  7507.     MOVE.W    2(A2,D3.W),D4
  7508.     MOVE.B    0(A2,D3.W),00(A1,D4.W)
  7509.     MOVE.B    1(A2,D3.W),01(A1,D4.W)
  7510.     MOVE.B    0(A2,D3.W),40(A1,D4.W)
  7511.     MOVE.B    1(A2,D3.W),41(A1,D4.W)
  7512.     MOVE.B    0(A2,D3.W),80(A1,D4.W)
  7513.     MOVE.B    1(A2,D3.W),81(A1,D4.W)
  7514.     RTS
  7515.  
  7516. ColSliders
  7517.     dc.w %0000000001111100,0
  7518.     dc.w %0000111110000000,1
  7519.     dc.w %0000000111110000,1
  7520.     dc.w %0000000000111110,1
  7521.     dc.w %0000011111000000,2
  7522.     dc.w %0000000011111000,2
  7523.     dc.w %0000000000011111,2
  7524.     dc.w %0000001111100000,3
  7525.     dc.w %0000000001111100,3
  7526.     dc.w %0000111110000000,4
  7527.     dc.w %0000000111110000,4
  7528.     dc.w %0000000000111110,4
  7529.     dc.w %0000011111000000,5
  7530.     dc.w %0000000011111000,5
  7531.     dc.w %0000000000011111,5
  7532.     dc.w %0000001111100000,6
  7533.  
  7534. SelectColor
  7535.     CMP.W    #84,D1
  7536.     BHS    Return1
  7537.     MOVE.L    TextBplPtr,A0
  7538.     LEA    2410(A0),A0
  7539.     MOVEQ    #24,D2
  7540. slcloop    CLR.L    (A0)
  7541.     LEA    40(A0),A0
  7542.     DBRA    D2,slcloop
  7543.  
  7544.     SUB.W    #82,D0
  7545.     DIVU    #13,D0
  7546.     SUB.W    #60,D1
  7547.     DIVU    #6,D1
  7548.     MOVE.W    D0,D2
  7549.     LSL.W    #2,D2
  7550.     ADD.W    D1,D2
  7551.     MOVE.W    D2,CurrColor
  7552. MarkColor
  7553.     BSR    gcpskip
  7554.     MOVE.L    A0,UndoColAddr
  7555.     MOVE.W    D1,UndoCol
  7556.     BSR    ShowColSliders
  7557.     BSR.S    BlockColors
  7558.     MOVE.W    CurrColor,D0
  7559.     MOVE.W    D0,D1
  7560.     AND.W    #$0003,D1
  7561.     MULU    #6*40,D1
  7562.     MOVE.L    TextBplPtr,A0
  7563.     ADD.L    D1,A0
  7564.     LEA    2410(A0),A0
  7565.     BTST    #2,D0
  7566.     BNE.S    slcskip
  7567.     MOVE.W    #$3FF0,(A0)
  7568.     MOVE.W    #$3FF0,240(A0)
  7569.     MOVEQ    #4,D0
  7570. slclop2    LEA    40(A0),A0
  7571.     MOVE.W    #$2010,(A0)
  7572.     DBRA    D0,slclop2
  7573.     BRA    WaitForButtonUp
  7574.  
  7575. slcskip    MOVE.L    #$0001FF80,(A0)
  7576.     MOVE.L    #$0001FF80,240(A0)
  7577.     MOVEQ    #4,D0
  7578. slclop3    LEA    40(A0),A0
  7579.     MOVE.L    #$0001FF80,(A0)
  7580.     DBRA    D0,slclop3
  7581.     BRA    WaitForButtonUp
  7582.  
  7583. BlockColors
  7584.     MOVE.L    TextBplPtr,A0
  7585.     LEA    2452(A0),A0
  7586.     MOVEQ    #3,D1
  7587. suploop2
  7588.     MOVEQ    #4,D0
  7589. suploop3
  7590.     MOVE.B    #$FF,(A0)
  7591.     ADD.L    #40,A0
  7592.     DBRA    D0,suploop3
  7593.     ADD.L    #40,A0
  7594.     DBRA    D1,suploop2
  7595.     RTS
  7596.  
  7597. ColorGadgets
  7598.     CMP.W    #79,D0
  7599.     BHS    SetDefaultCol
  7600.     CMP.W    #33,D0
  7601.     BHS.S    CancelCol
  7602.     MOVE.L    UndoColAddr,A0
  7603.     MOVE.W    UndoCol,D0
  7604.     MOVE.W    (A0),UndoCol
  7605.     MOVE.W    D0,(A0)
  7606.     BSR    ShowColSliders
  7607.     BRA    SetScreenColors
  7608.  
  7609. CancelCol
  7610.     LEA    CanCols(PC),A0
  7611.     LEA    ColorTable,A1
  7612.     MOVEQ    #7,D0
  7613. cacolop    MOVE.W    (A0)+,(A1)+
  7614.     DBRA    D0,cacolop
  7615.     BSR    ShowColSliders
  7616.     BRA    SetScreenColors
  7617.  
  7618. CopyCfgData
  7619.     LEA    ColorTable,A0
  7620.     LEA    CanCols(PC),A1
  7621.     MOVEQ    #7,D0
  7622. cocclop    MOVE.W    (A0)+,(A1)+
  7623.     DBRA    D0,cocclop
  7624.     LEA    ModulesPath2,A0
  7625.     MOVE.W    #195,D0
  7626. cocclp2    CLR.B    (A0)+
  7627.     DBRA    D0,cocclp2
  7628.     LEA    ModulesPath,A0
  7629.     LEA    ModulesPath2,A1
  7630.     BSR.S    cocclp3
  7631.     LEA    SongsPath,A0
  7632.     LEA    SongsPath2,A1
  7633.     BSR.S    cocclp3
  7634.     LEA    SamplePath,A0
  7635.     LEA    SamplePath2,A1
  7636. cocclp3    MOVE.B    (A0)+,(A1)+
  7637.     BNE.S    cocclp3
  7638.     LEA    VUMeterColors,A0
  7639.     LEA    SaveColors,A1
  7640.     MOVEQ    #40+48-1,D0
  7641. cocclp4    MOVE.W    (A0)+,(A1)+
  7642.     DBRA    D0,cocclp4
  7643.     RTS
  7644.  
  7645. UndoCol        dc.w 0
  7646. UndoColAddr    dc.l 0
  7647. CanCols        dc.w 0,0,0,0,0,0,0,0
  7648.  
  7649. SetDefaultCol
  7650.     LEA    DefCol,A0
  7651.     LEA    ColorTable,A1
  7652.     MOVEQ    #7,D0
  7653. sdcloop    MOVE.W    (A0)+,(A1)+
  7654.     DBRA    D0,sdcloop
  7655.     BSR    ShowColSliders
  7656. SetScreenColors
  7657.     BSR    SetupAnaCols
  7658. SetScreenColors2
  7659.     LEA    ColorTable,A0
  7660.     LEA    CopCol0,A1
  7661.     MOVE.W    (A0),(A1)
  7662.     MOVE.W    2(A0),4(A1)
  7663.     MOVE.W    4(A0),8(A1)
  7664.     MOVE.W    6(A0),12(A1)
  7665.     MOVE.W    8(A0),16(A1)
  7666.     MOVE.W    10(A0),20(A1)
  7667.     MOVE.W    12(A0),24(A1)
  7668.     MOVE.W    14(A0),28(A1)
  7669.     MOVE.W    14(A0),D0
  7670.     TST.W    SamScrEnable
  7671.     BEQ.S    sscnosc
  7672.     MOVE.W    8(A0),D0
  7673. sscnosc    MOVE.W    D0,NoteCol
  7674.     MOVE.W    10(A0),D0
  7675.     MOVE.W    D0,D4
  7676.     MOVE.W    #3,FadeX
  7677.     BSR.S    FadeCol
  7678.     MOVE.W    D0,32(A1)
  7679.     MOVE.W    D4,36(A1)
  7680.     MOVE.W    D4,D0
  7681.     MOVE.W    #-3,FadeX
  7682.     BSR.S    FadeCol
  7683.     MOVE.W    D0,40(A1)
  7684.     RTS
  7685.  
  7686. FadeCol    MOVE.W    D0,D1
  7687.     MOVE.W    D0,D2
  7688.     MOVE.W    D0,D3
  7689.     LSR.W    #8,D1
  7690.     ADD.W    FadeX(PC),D1
  7691.     BPL.S    redskp
  7692.     MOVEQ    #0,D1
  7693. redskp    CMP.W    #15,D1
  7694.     BLS.S    redskp2
  7695.     MOVEQ    #15,D1
  7696. redskp2    AND.W    #$00F0,D2
  7697.     LSR.W    #4,D2
  7698.     ADD.W    FadeX(PC),D2
  7699.     BPL.S    grnskp
  7700.     MOVEQ    #0,D2
  7701. grnskp    CMP.W    #15,D2
  7702.     BLS.S    grnskp2
  7703.     MOVEQ    #15,D2
  7704. grnskp2    AND.W    #$000F,D3
  7705.     ADD.W    FadeX(PC),D3
  7706.     BPL.S    bluskp
  7707.     MOVEQ    #0,D3
  7708. bluskp    CMP.W    #15,D3
  7709.     BLS.S    bluskp2
  7710.     MOVEQ    #15,D3
  7711. bluskp2    MOVE.W    D3,D0
  7712.     LSL.W    #4,D2
  7713.     OR.W    D2,D0
  7714.     LSL.W    #8,D1
  7715.     OR.W    D1,D0
  7716.     RTS
  7717.  
  7718. CurrColor    dc.w    0
  7719. FadeX        dc.w    -3
  7720.  
  7721. EnterPrintPath
  7722.     BSR    StorePtrCol
  7723.     BSR    SetWaitPtrCol
  7724.     LEA    PrintPath,A6
  7725.     MOVE.L    A6,ShowTextPtr
  7726.     MOVE.L    A6,TextEndPtr
  7727.     ADD.L    #31,TextEndPtr
  7728.     MOVE.W    #12,TextLength
  7729.     MOVE.W    #3694,A4
  7730.     BSR    GetTextLine
  7731.     BRA    RestorePtrCol
  7732.  
  7733. ShowPrintPath
  7734.     LEA    PrintPath,A0
  7735.     MOVE.W    #3694,D1
  7736.     MOVEQ    #12,D0
  7737.     BRA    ShowText3
  7738.  
  7739. ; Print Song
  7740.  
  7741. PrintSong
  7742.     LEA    PrintSongText,A0
  7743.     BSR    AreYouSure
  7744.     BNE    Return1
  7745.     BSR    StorePtrCol
  7746.     MOVE.L    #PrintPath,D1
  7747.     MOVE.L    #1006,D2
  7748.     MOVE.L    DOSbase,A6
  7749.     JSR    LVOOpen(A6)
  7750.     MOVE.L    D0,FileHandle
  7751.     BEQ    CantOpenFile
  7752.     BSR    SetDiskPtrCol
  7753.     LEA    PrintingSongText,A0
  7754.     BSR    ShowStatusText
  7755.     MOVE.L    FileHandle,D1
  7756.     MOVE.L    #SongDumpText,D2
  7757.     MOVEQ    #68,D3
  7758.     MOVE.L    DOSbase,A6
  7759.     JSR    LVOWrite(A6)
  7760.     MOVE.L    FileHandle,D1
  7761.     MOVE.L    SongDataPtr,D2
  7762.     MOVEQ    #20,D3
  7763.     JSR    LVOWrite(A6)
  7764.     BSR    PrintCRLF
  7765.     BSR    PrintCRLF
  7766.     BSR    PrintSong2
  7767.     BSR    PrintCRLF
  7768.     BSR    PrintSong4
  7769.     BSR    PrintFormFeed
  7770.     MOVE.L    SongDataPtr,A0
  7771.     MOVEQ    #0,D0
  7772.     MOVE.B    sd_numofpatt(A0),D0
  7773.     LEA    sd_pattpos(A0),A0
  7774.     MOVEQ    #0,D7
  7775. ps_loop    CMP.B    (A0,D0.W),D7
  7776.     BGT.S    ps_skip
  7777.     MOVE.B    (A0,D0.W),D7
  7778. ps_skip    SUBQ.W    #1,D0
  7779.     BPL.S    ps_loop
  7780.     MOVEQ    #0,D1
  7781. ps_loop2
  7782.     MOVEM.L    D1-D7/A0-A6,-(SP)
  7783.     BSR    PrintPattern
  7784.     MOVEM.L    (SP)+,D1-D7/A0-A6
  7785.     TST.L    D0
  7786.     BNE.S    ps_skip2
  7787.     MOVEM.L    D1/D7,-(SP)
  7788.     BSR    PrintFormFeed
  7789.     MOVEM.L    (SP)+,D1/D7
  7790.     ADDQ.W    #1,D1
  7791.     CMP.W    D7,D1
  7792.     BLO.S    ps_loop2
  7793. ps_skip2
  7794.     MOVE.L    DOSbase,A6
  7795.     MOVE.L    FileHandle,D1
  7796.     JSR    LVOClose(A6)
  7797.     BSR    ShowAllRight
  7798.     BRA    RestorePtrCol
  7799.  
  7800. PrintSong2
  7801.     MOVEQ    #1,D7
  7802. ps2_2    MOVE.L    D7,D0
  7803.     LSR.B    #4,D0
  7804.     CMP.B    #9,D0
  7805.     BLS.S    spujk
  7806.     ADDQ.B    #7,D0
  7807. spujk    ADD.B    #'0',D0
  7808.     MOVE.B    D0,PattXText1
  7809.     MOVE.B    D7,D0
  7810.     AND.B    #$0F,D0
  7811.     CMP.B    #9,D0
  7812.     BLS.S    spujk2
  7813.     ADDQ.B    #7,D0
  7814. spujk2    ADD.B    #'0',D0
  7815.     MOVE.B    D0,PattXText2
  7816.  
  7817.     MOVE.L    SongDataPtr,A0
  7818.     MOVE.W    D7,D0
  7819.     MULU    #30,D0
  7820.     LEA    -10(A0,D0.W),A0
  7821.     LEA    PpText,A1
  7822.     MOVEQ    #21,D0
  7823. ps2_loop
  7824.     MOVE.B    #' ',(A1)+
  7825.     DBRA    D0,ps2_loop
  7826.     LEA    PpText,A1
  7827.  
  7828.     MOVE.L    A0,SavIt
  7829. ps2_loop2
  7830.     MOVE.B    (A0)+,D0
  7831.     BEQ    PrintSong3
  7832.     MOVE.B    D0,(A1)+
  7833.     BRA.S    ps2_loop2
  7834.  
  7835. SavIt    dc.l    0
  7836.  
  7837. PrintSong3
  7838.     MOVE.L    D7,-(SP) ; pattnum
  7839.     MOVE.L    SavIt(PC),A0
  7840.     MOVE.W    22(A0),D0
  7841.     ADD.W    D0,D0
  7842.     LEA    Prafs+2+4,A0
  7843.     BSR    IntToHexASCII
  7844.     MOVE.L    SavIt(PC),A0
  7845.     MOVE.W    26(A0),D0
  7846.     ADD.W    D0,D0
  7847.     LEA    Prafs+8+4,A0
  7848.     BSR    IntToHexASCII
  7849.     MOVE.L    SavIt(PC),A0
  7850.     MOVE.W    28(A0),D0
  7851.     ADD.W    D0,D0
  7852.     LEA    Prafs+14+4,A0
  7853.     BSR    IntToHexASCII
  7854.     MOVE.L    DOSbase,A6
  7855.     MOVE.L    FileHandle,D1
  7856.     MOVE.L    #PtotText,D2
  7857.     MOVEQ    #52,D3
  7858.     JSR    LVOWrite(A6)
  7859.     MOVE.L    (SP)+,D7
  7860.     ADDQ.W    #1,D7
  7861.     CMP.W    #$0020,D7
  7862.     BNE    ps2_2
  7863.     RTS
  7864.  
  7865. PrintSong4
  7866.     MOVE.L    SongDataPtr,A0
  7867.     MOVEQ    #0,D7
  7868.     MOVE.B    sd_numofpatt(A0),D7
  7869.     LEA    sd_pattpos(A0),A0
  7870.     MOVEQ    #0,D5
  7871. ps4_loop1
  7872.     MOVEQ    #0,D6
  7873. ps4_loop2
  7874.     MOVEQ    #0,D0
  7875.     MOVE.B    (A0)+,D0
  7876.     MOVE.W    D0,D1
  7877.     LSR.W    #4,D1
  7878.     ADD.B    #$30,D1
  7879.     CMP.B    #$39,D1
  7880.     BLS.S    ps4_skip
  7881.     ADDQ.B    #7,D1
  7882. ps4_skip
  7883.     AND.B    #15,D0
  7884.     ADD.B    #$30,D0
  7885.     CMP.B    #$39,D0
  7886.     BLS.S    ps4_skip2
  7887.     ADDQ.B    #7,D0
  7888. ps4_skip2
  7889.     LEA    PnText,A1
  7890.     MOVE.B    D1,(A1)+
  7891.     MOVE.B    D0,(A1)
  7892.     MOVEM.L    D5-D7/A0,-(SP)
  7893.     MOVE.L    DOSbase,A6
  7894.     MOVE.L    FileHandle,D1
  7895.     MOVE.L    #PnText,D2
  7896.     MOVEQ    #4,D3
  7897.     JSR    LVOWrite(A6)
  7898.     MOVEM.L    (SP)+,D5-D7/A0
  7899.     ADDQ.W    #1,D5
  7900.     CMP.W    D5,D7
  7901.     BEQ    Return1
  7902.     ADDQ.W    #1,D6
  7903.     CMP.W    #$0010,D6
  7904.     BNE.S    ps4_loop2
  7905.     MOVEM.L    D5-D7/A0,-(SP)
  7906.     BSR.S    PrintCRLF
  7907.     MOVEM.L    (SP)+,D5-D7/A0
  7908.     BRA.S    ps4_loop1
  7909.  
  7910. PrintCRLF
  7911.     MOVE.L    DOSbase,A6
  7912.     MOVE.L    FileHandle,D1
  7913.     MOVE.L    #CRLF_Text,D2
  7914.     MOVEQ    #2,D3
  7915.     JSR    LVOWrite(A6)
  7916.     RTS
  7917.  
  7918. PrintFormFeed
  7919.     MOVE.L    DOSbase,A6
  7920.     MOVE.L    FileHandle,D1
  7921.     MOVE.L    #FF_Text,D2
  7922.     MOVEQ    #1,D3
  7923.     JSR    LVOWrite(A6)
  7924.     RTS
  7925.  
  7926. PrintPattern
  7927.     MOVE.L    D1,D6 ; D1=pattern number
  7928.     DIVU    #10,D6
  7929.     ADD.B    #'0',D6
  7930.     MOVE.B    D6,PattNumText1
  7931.     SWAP    D6
  7932.     ADD.B    #'0',D6
  7933.     MOVE.B    D6,PattNumText2
  7934.     MOVEM.L    D0-D7/A0-A6,-(SP)
  7935.     MOVE.L    FileHandle,D1
  7936.     MOVE.L    #PatternNumText,D2
  7937.     MOVEQ    #18,D3
  7938.     MOVE.L    DOSbase,A6
  7939.     JSR    LVOWrite(A6)
  7940.     MOVEM.L    (SP)+,D0-D7/A0-A6
  7941.  
  7942.     MOVE.L    D1,D6
  7943.     MOVE.L    SongDataPtr,A6
  7944.     LEA    sd_patterndata(A6),A6
  7945.     LSL.L    #8,D6
  7946.     LSL.L    #2,D6
  7947.     ADD.L    D6,A6
  7948.     CLR.L    PPattPos
  7949.     MOVEQ    #0,D6
  7950. pp_posloop
  7951.     MOVEQ    #0,D7
  7952.     MOVE.W    #2,TextLength
  7953.     MOVE.L    PPattPos,D1
  7954.     LEA    PattPosText,A5
  7955.     DIVU    #10,D1
  7956.     ADD.B    #'0',D1
  7957.     MOVE.B    D1,(A5)+
  7958.     CLR.W    D1
  7959.     SWAP    D1
  7960.     ADD.B    #'0',D1
  7961.     MOVE.B    D1,(A5)+
  7962.     ADDQ.L    #5,A5
  7963. pp_noteloop
  7964.     MOVEQ    #0,D0
  7965.     MOVEQ    #0,D1
  7966.     MOVE.W    #3,TextLength
  7967.     MOVE.W    (A6),D1
  7968.     AND.W    #$0FFF,D1
  7969.     LEA    PeriodTable,A0
  7970. pp_findloop
  7971.     CMP.W    0(A0,D0.L),D1
  7972.     BEQ    PrintNote
  7973.     ADDQ.L    #2,D0
  7974.     BRA.S    pp_findloop
  7975.  
  7976. PrintNote
  7977.     ADD.L    D0,D0
  7978.     ADD.L    NoteNamesPtr,D0
  7979.     MOVE.L    D0,A0
  7980.     MOVE.L    (A0),(A5)+
  7981.     CMP.B    #'¡',-3(A5)
  7982.     BNE.S    prnoxyz
  7983.     MOVE.B    #'b',-3(A5)
  7984. prnoxyz    ADDQ.L    #1,A5
  7985.     MOVEQ    #0,D0
  7986.     MOVE.W    (A6),D0
  7987.     AND.W    #$F000,D0
  7988.     LSR.W    #8,D0
  7989.     LSL.L    #1,D0
  7990.     LEA    FastHexTable,A0
  7991.     ADD.L    D0,A0
  7992.     MOVE.B    (A0),(A5)+
  7993.     MOVEQ    #0,D0
  7994.     MOVE.B    2(A6),D0
  7995.     LSL.L    #1,D0
  7996.     LEA    FastHexTable,A0
  7997.     ADD.L    D0,A0
  7998.     MOVE.W    (A0),(A5)+
  7999.     MOVEQ    #0,D0
  8000.     MOVE.B    3(A6),D0
  8001.     LSL.L    #1,D0
  8002.     LEA    FastHexTable,A0
  8003.     ADD.L    D0,A0
  8004.     MOVE.W    (A0),(A5)+
  8005.     ADDQ.L    #4,A5
  8006.     ADDQ.L    #4,A6
  8007.     ADDQ.L    #1,D7
  8008.     CMP.L    #4,D7
  8009.     BNE    pp_noteloop
  8010.     ADDQ.L    #1,PPattPos
  8011.     MOVEM.L    D0-D7/A0-A6,-(SP)
  8012.     MOVE.L    DOSbase,A6
  8013.     MOVE.L    FileHandle,D1
  8014.     MOVE.L    #PnText2,D2
  8015.     MOVEQ    #68,D3
  8016.     JSR    LVOWrite(A6)
  8017.     BSR    PrintCRLF
  8018.     MOVEM.L    (SP)+,D0-D7/A0-A6
  8019.     BTST    #2,$DFF016
  8020.     BEQ.S    NegativeReturn
  8021.     ADDQ.L    #1,D6
  8022.     CMP.L    #64,D6
  8023.     BNE    pp_posloop
  8024.     MOVEQ    #0,D0
  8025.     RTS
  8026.  
  8027. NegativeReturn
  8028.     MOVEQ    #-1,D0
  8029.     RTS
  8030.  
  8031. PositiveReturn
  8032.     MOVEQ    #0,D0
  8033.     RTS
  8034.  
  8035. ;---- Setup2 ----
  8036.  
  8037. Setup2    BSR    WaitForButtonUp
  8038.     MOVE.W    #7,CurrScreen
  8039.     CLR.W    LastSetupScreen
  8040.     ST    DisableAnalyzer
  8041.     ST    NoSampleInfo
  8042.     BSR    Clear100Lines
  8043.     MOVE.L    SetupMemPtr,D0
  8044.     BNE    set2skp
  8045.     BSR    SaveMainPic
  8046.     BEQ    ExitSetup
  8047. set2skp    BSR    DecompactSetup2
  8048.     BSR    SetScreenColors
  8049. refrsh2    BSR    ShowIntMode
  8050.     BSR    ShowTempo
  8051.     BSR    ShowSpeed
  8052.     BSR    ShowColEdit
  8053.     BSR    ShowRainbow
  8054.     BSR    GetColPos
  8055.     BSR    ShowColSliders
  8056.     BSR    ShowS2Modules
  8057.     BSR    ShowS2Songs
  8058.     BSR    ShowS2Samples
  8059.     BSR    ShowS2PTPath
  8060.     BSR    ShowS2MaxPLST
  8061.     BSR    ShowS2DMAWait
  8062.     BSR    ShowS2TuneNote
  8063.     BSR    ShowS2SalvAddr
  8064.     BRA    ShowS2T
  8065.  
  8066. CheckSetup2Gadgs
  8067.     MOVEM.W    MouseX2,D0/D1
  8068.     CMP.W    #210,D0
  8069.     BHS    Setup2Menu3
  8070.     CMP.W    #108,D0
  8071.     BHS.S    Setup2Menu2
  8072. ;---- Menu 1 ----
  8073.     CMP.W    #11,D1
  8074.     BLS    ToggleIntMode
  8075.     CMP.W    #22,D1
  8076.     BLS    ChangeTempo
  8077.     CMP.W    #33,D1
  8078.     BLS    ChangeSpeed
  8079.     CMP.W    #44,D1
  8080.     BLS    ToggleColEdit
  8081.     CMP.W    #55,D1
  8082.     BLS    RotOrSpread
  8083.     CMP.W    #66,D1
  8084.     BLS    SetRed2
  8085.     CMP.W    #77,D1
  8086.     BLS    SetGreen2
  8087.     CMP.W    #88,D1
  8088.     BLS    SetBlue2
  8089.     CMP.W    #99,D1
  8090.     BLS    ColorGadgets2
  8091.     RTS
  8092.  
  8093. Setup2Menu2
  8094.     CMP.W    #11,D1
  8095.     BLS    Set2ModPath
  8096.     CMP.W    #22,D1
  8097.     BLS    Set2SongPath
  8098.     CMP.W    #33,D1
  8099.     BLS    Set2SamPath
  8100.     CMP.W    #44,D1
  8101.     BLS    Set2PTPath
  8102.     CMP.W    #55,D1
  8103.     BLS    SetS2MaxPLST
  8104.     CMP.W    #66,D1
  8105.     BLS    SetS2DMAWait
  8106.     CMP.W    #77,D1
  8107.     BLS    SetS2TuneNote
  8108.     CMP.W    #88,D1
  8109.     BLS    SetS2SalvAddr
  8110.     CMP.W    #99,D1
  8111.     BLS    RecoverSong
  8112.     RTS
  8113.  
  8114. Setup2Menu3
  8115.     CMP.W    #11,D1
  8116.     BLS    ExitOrDefault
  8117.     CMP.W    #22,D1
  8118.     BLS    ToggleOverride
  8119.     CMP.W    #33,D1
  8120.     BLS    ToggleNosamples
  8121.     CMP.W    #44,D1
  8122.     BLS    ToggleBlankZero
  8123.     CMP.W    #55,D1
  8124.     BLS    ToggleShowDirs
  8125.     CMP.W    #66,D1
  8126.     BLS    ToggleShowPublic
  8127.     CMP.W    #77,D1
  8128.     BLS    ToggleCutToBuf
  8129.     CMP.W    #88,D1
  8130.     BLS    ToggleIFFLoop
  8131.     CMP.W    #99,D1
  8132.     BLS    ToggleHH
  8133.     RTS
  8134.  
  8135. ExitOrDefault
  8136.     CMP.W    #265,D0
  8137.     BLS.S    SetS2Default
  8138.     CMP.W    #306,D0
  8139.     BHS    Setup
  8140.     BRA    ExitSetup
  8141.  
  8142. SetS2Default
  8143.     LEA    SetDefaultsText(PC),A0
  8144.     BSR    AreYouSure
  8145.     BNE    Return1
  8146.     LEA    DefaultSetupData,A0
  8147.     LEA    SongsPath-SetupData(A0),A2
  8148.     LEA    SongsPath,A1
  8149.     MOVEQ    #95,D0
  8150. ss2dela    MOVE.B    (A2)+,(A1)+
  8151.     DBRA    D0,ss2dela
  8152.     LEA    PTPath-SetupData(A0),A2
  8153.     LEA    PTPath,A1
  8154.     MOVEQ    #31,D0
  8155. ss2delb    MOVE.B    (A2)+,(A1)+
  8156.     DBRA    D0,ss2delb
  8157.     LEA    MaxPLSTEntries-SetupData(A0),A2
  8158.     MOVE.W    (A2),MaxPLSTEntries
  8159.     LEA    DMAWait-SetupData(A0),A2
  8160.     MOVE.W    (A2),DMAWait
  8161.     LEA    TuneNote-SetupData(A0),A2
  8162.     MOVE.L    (A2),TuneNote
  8163.     LEA    SalvageAddress-SetupData(A0),A2
  8164.     LEA    SalvageAddress,A1
  8165.     MOVE.L    (A2)+,(A1)+
  8166.     MOVE.L    (A2),(A1)
  8167.     BRA    refrsh2
  8168.  
  8169. SetDefaultsText    dc.b "Set defaults?",0
  8170.  
  8171. ToggleIntMode
  8172.     BSR    ResetMusicInt
  8173.     EOR.B    #1,IntMode
  8174.     BSR    SetMusicInt
  8175.     BSR    SetTempo
  8176.     BSR    WaitForButtonUp
  8177. ShowIntMode
  8178.     LEA    VBlankText(PC),A0
  8179.     TST.B    IntMode
  8180.     BEQ.S    simskip
  8181.     LEA    CIAText(PC),A0
  8182. simskip    MOVEQ    #6,D0
  8183.     MOVE.W    #167,D1
  8184.     BRA    ShowText3
  8185.  
  8186. VBlankText    dc.b "VBLANK"
  8187. CIAText        dc.b " CIA  "
  8188.  
  8189. ChangeSpeed
  8190.     MOVEQ    #0,D1
  8191.     CMP.W    #94,D0
  8192.     BHS.S    SpeedDown
  8193.     CMP.W    #80,D0
  8194.     BHS.S    SpeedUp
  8195.     RTS
  8196.  
  8197. SpeedUp    MOVE.W    DefaultSpeed,D1
  8198.     ADDQ.B    #1,D1
  8199.     CMP.B    #$FF,D1
  8200.     BLS.S    spedup2
  8201.     MOVE.W    #$FF,D1
  8202. spedup2    MOVE.W    D1,DefaultSpeed
  8203.     MOVE.L    D1,CurrSpeed
  8204.     BSR.S    ShowSpeed
  8205.     BSR    Wait_4000
  8206.     BRA    Wait_4000
  8207. ShowSpeed
  8208.     MOVE.W    #608+440,TextOffset
  8209.     MOVE.W    DefaultSpeed,WordNumber
  8210.     JMP    PrintHexByte
  8211.  
  8212. SpeedDown
  8213.     MOVE.W    DefaultSpeed,D1
  8214.     SUB.B    #1,D1
  8215.     CMP.B    #1,D1
  8216.     BHS.S    spedup2
  8217.     MOVEQ    #1,D1
  8218.     BRA.S    spedup2
  8219.  
  8220.  
  8221. ToggleOverride
  8222.     EOR.B    #1,OverrideFlag
  8223.     BRA.S    ShowS2T
  8224. ToggleNosamples
  8225.     EOR.B    #1,NosamplesFlag
  8226.     BRA.S    ShowS2T
  8227. ToggleBlankZero
  8228.     EOR.B    #1,BlankZeroFlag
  8229.     BSR.S    ShowS2T
  8230.     BRA    RedrawPattern
  8231. ToggleShowDirs
  8232.     EOR.B    #1,ShowDirsFlag
  8233.     BRA.S    ShowS2T
  8234. ToggleShowPublic
  8235.     EOR.B    #1,ShowPublicFlag
  8236.     MOVE.W    #1,UpdateFreeMem
  8237.     BRA.S    ShowS2T
  8238. ToggleCutToBuf
  8239.     EOR.B    #1,CutToBufFlag
  8240.     BRA.S    ShowS2T
  8241. ToggleIFFLoop
  8242.     EOR.B    #1,IFFLoopFlag
  8243.     BRA.S    ShowS2T
  8244. ToggleHH
  8245.     EOR.B    #1,HHFlag
  8246.  
  8247. ShowS2T    CLR.B    RawKeyCode
  8248.     CMP.W    #7,CurrScreen
  8249.     BNE    Return1
  8250.     LEA    OverrideFlag,A4
  8251.     MOVE.W    #3,TextLength
  8252.     MOVEQ    #7,D7
  8253.     MOVE.W    #636,D6
  8254. sstloop2
  8255.     MOVE.W    D6,TextOffset
  8256.     LEA    ToggleOFFText,A0
  8257.     TST.B    (A4)+
  8258.     BEQ.S    sstskip2
  8259.     LEA    ToggleONText,A0
  8260. sstskip2
  8261.     BSR    ShowText2
  8262.     ADD.W    #440,D6
  8263.     DBRA    D7,sstloop2
  8264.     BRA    WaitForButtonUp
  8265.  
  8266. ShowS2Modules
  8267.     MOVE.W    #177,D1
  8268.     LEA    ModulesPath,A0
  8269. s2path    MOVEQ    #9,D0
  8270.     BRA    ShowText3
  8271.  
  8272. ShowS2Songs
  8273.     MOVE.W    #177+440,D1
  8274.     LEA    SongsPath,A0
  8275.     BRA.S    s2path
  8276.  
  8277. ShowS2Samples
  8278.     MOVE.W    #177+880,D1
  8279.     LEA    SamplePath,A0
  8280.     BRA.S    s2path
  8281.  
  8282. ShowS2PTPath
  8283.     MOVE.W    #177+1320,D1
  8284.     LEA    PTPath,A0
  8285.     BRA.S    s2path
  8286.  
  8287.  
  8288. Set2ModPath
  8289.     BSR    StorePtrCol
  8290.     BSR    SetWaitPtrCol
  8291.     LEA    ModulesPath,A6
  8292.     MOVE.L    A6,ShowTextPtr
  8293.     MOVE.L    A6,TextEndPtr
  8294.     ADD.L    #31,TextEndPtr
  8295.     MOVE.W    #9,TextLength
  8296.     MOVE.W    #177,A4
  8297.     BSR    GetTextLine
  8298.     BRA    RestorePtrCol
  8299.  
  8300. Set2SongPath
  8301.     BSR    StorePtrCol
  8302.     BSR    SetWaitPtrCol
  8303.     LEA    SongsPath,A6
  8304.     MOVE.L    A6,ShowTextPtr
  8305.     MOVE.L    A6,TextEndPtr
  8306.     ADD.L    #31,TextEndPtr
  8307.     MOVE.W    #9,TextLength
  8308.     MOVE.W    #177+440,A4
  8309.     BSR    GetTextLine
  8310.     BRA    RestorePtrCol
  8311.  
  8312. Set2SamPath
  8313.     BSR    StorePtrCol
  8314.     BSR    SetWaitPtrCol
  8315.     LEA    SamplePath,A6
  8316.     MOVE.L    A6,ShowTextPtr
  8317.     MOVE.L    A6,TextEndPtr
  8318.     ADD.L    #31,TextEndPtr
  8319.     MOVE.W    #9,TextLength
  8320.     MOVE.W    #177+880,A4
  8321.     BSR    GetTextLine
  8322.     BRA    RestorePtrCol
  8323.  
  8324. Set2PTPath
  8325.     BSR    StorePtrCol
  8326.     BSR    SetWaitPtrCol
  8327.     LEA    PTPath,A6
  8328.     MOVE.L    A6,ShowTextPtr
  8329.     MOVE.L    A6,TextEndPtr
  8330.     ADD.L    #31,TextEndPtr
  8331.     MOVE.W    #9,TextLength
  8332.     MOVE.W    #177+1320,A4
  8333.     BSR    GetTextLine
  8334.     BRA    RestorePtrCol
  8335.  
  8336. SetS2MaxPLST
  8337.     CMP.W    #199,D0
  8338.     BHS.S    S2plstd
  8339.     CMP.W    #188,D0
  8340.     BHS.S    S2PLSTu
  8341.     RTS
  8342. S2PLSTu    MOVE.W    MaxPLSTEntries,D0
  8343.     ADD.W    #100,D0
  8344.     CMP.W    #9999,D0
  8345.     BLS.S    s2pu
  8346.     MOVE.W    #9999,D0
  8347. s2pu    MOVE.W    D0,MaxPLSTEntries
  8348.     BSR.S    ShowS2MaxPLST
  8349.     BRA    Wait_4000
  8350.  
  8351. S2PLSTd    MOVEQ    #0,D0
  8352.     MOVE.W    MaxPLSTEntries,D0
  8353.     ADDQ.W    #1,D0
  8354.     DIVU    #100,D0
  8355.     SUBQ.W    #1,D0
  8356.     BPL.S    s2pd
  8357.     MOVEQ    #0,D0
  8358.     BRA.S    s2pu
  8359. s2pd    MULU    #100,D0
  8360.     BRA.S    s2pu
  8361.  
  8362. ShowS2MaxPLST
  8363.     MOVE.W    MaxPLSTEntries,WordNumber
  8364.     MOVE.W    #1939,TextOffset
  8365.     BRA    Print4DecDigits
  8366.  
  8367. SetS2DMAWait
  8368.     CMP.W    #199,D0
  8369.     BHS.S    S2dwd
  8370.     CMP.W    #188,D0
  8371.     BHS.S    S2dwu
  8372.     RTS
  8373. S2dwu    MOVE.W    DMAWait,D0
  8374.     ADDQ.W    #1,D0
  8375.     BTST    #2,$DFF016
  8376.     BNE.S    s2npu
  8377.     ADD.W    #9,D0
  8378. s2npu    CMP.W    #9999,D0
  8379.     BLS.S    s2du
  8380.     MOVE.W    #9999,D0
  8381. s2du    MOVE.W    D0,DMAWait
  8382.     BSR.S    ShowS2DMAWait
  8383.     BRA    Wait_4000
  8384.  
  8385. S2dwd    MOVE.W    DMAWait,D0
  8386.     SUBQ.W    #1,D0
  8387.     BTST    #2,$DFF016
  8388.     BNE.S    s2npd
  8389.     SUB.W    #9,D0
  8390. s2npd    TST.W    D0
  8391.     BPL.S    s2du
  8392.     MOVEQ    #0,D0
  8393.     BRA.S    s2du
  8394.  
  8395. ShowS2DMAWait
  8396.     MOVE.W    DMAWAit,WordNumber
  8397.     MOVE.W    #2379,TextOffset
  8398.     BRA    Print4DecDigits
  8399.  
  8400. SetS2TuneNote
  8401.     CMP.W    #187,D0
  8402.     BHS.S    ss2tvol
  8403.     MOVE.W    #2820,D1
  8404.     MOVEQ    #3,D0
  8405.     LEA    SpcNoteText,A0
  8406.     BSR    ShowText3
  8407.     MOVE.W    #3,SamNoteType
  8408.     MOVE.L    #TuneNote,SplitAddress
  8409.     BRA    WaitForButtonUp
  8410.  
  8411. ShowS2TuneNote
  8412.     CMP.W    #7,CurrScreen
  8413.     BNE    Return1
  8414.     MOVE.L    NoteNamesPtr,A4
  8415.     MOVE.W    TuneNote,D0
  8416.     LSL.W    #2,D0
  8417.     LEA    (A4,D0.W),A0
  8418.     MOVEQ    #4,D0
  8419.     MOVE.W    #2820,D1
  8420.     BSR    ShowText3
  8421.     MOVE.W    TToneVol,WordNumber
  8422.     MOVE.W    #2824,TextOffset
  8423.     BRA    PrintHexByte
  8424.  
  8425. ss2tvol    MOVE.W    #2824,TextOffset
  8426.     BSR    GetHexByte
  8427.     MOVE.W    D0,TToneVol
  8428.     BRA.S    ShowS2TuneNote
  8429.  
  8430. SetS2SalvAddr
  8431.     BRA    ShowNotImpl
  8432.     BSR    StorePtrCol
  8433.     BSR    SetWaitPtrCol
  8434.     LEA    SalvageAddress,A6
  8435.     MOVE.L    A6,ShowTextPtr
  8436.     MOVE.L    A6,TextEndPtr
  8437.     ADD.L    #6,TextEndPtr
  8438.     MOVE.W    #6,TextLength
  8439.     MOVE.W    #3260,A4
  8440.     MOVE.B    #5,EnterTextFlag
  8441.     BSR    GetTextLine
  8442.     CLR.B    EnterTextFlag
  8443.     BSR    RestorePtrCol
  8444. ShowS2SalvAddr
  8445.     LEA    SalvageAddress,A0
  8446.     MOVEQ    #6,D0
  8447.     MOVE.W    #3260,D1
  8448.     BRA    ShowText3
  8449.  
  8450. RecoverSong
  8451.     BRA    ShowNotImpl
  8452.     LEA    RecoverSongText(PC),A0
  8453.     BSR    AreYouSure
  8454.     BNE    Return1
  8455.     BSR    DoClearSong
  8456.     BSR    ClrSampleInfo
  8457.     BSR.S    FindAdr
  8458.     MOVE.L    D0,A0
  8459.     MOVE.L    SongDataPtr,A1
  8460.     MOVE.L    #70716,D0
  8461. recloop    MOVE.B    (A0)+,(A1)+
  8462.     SUBQ.L    #1,D0
  8463.     BNE.S    recloop    
  8464.     BRA    RedrawPattern
  8465.  
  8466. FindAdr    LEA    SalvageAddress+6,A0
  8467.     BSR    HexToInteger
  8468.     MOVE.W    D0,D3
  8469.     MOVEQ    #0,D0
  8470.     BSR    HexToInteger2
  8471.     SWAP    D0
  8472.     OR.W    D3,D0
  8473.     RTS
  8474.  
  8475. RecoverSongText    dc.b    "Recover Song?",0
  8476.  
  8477. ToggleColEdit
  8478.     CMP.W    #79,D0
  8479.     BHS    SelectColor2
  8480.     CLR.W    SpreadFlag
  8481.     LEA    VUMeterColors,A0
  8482.     MOVEQ    #48,D0
  8483.     CMP.L    TheRightColors(PC),A0
  8484.     BNE.S    tced2
  8485.     LEA    AnalyzerColors,A0
  8486.     MOVEQ    #36,D0
  8487. tced2    MOVE.L    A0,TheRightColors
  8488.     MOVE.W    D0,ColorsMax
  8489.     CMP.W    RainbowPos(PC),D0
  8490.     BHI.S    tced3
  8491.     CLR.W    RainbowPos
  8492. tced3    BSR    ShowRainbow
  8493.     BSR.S    ShowColEdit
  8494.     BRA    WaitForButtonUp
  8495. ShowColEdit
  8496.     LEA    cedtxt1(PC),A0
  8497.     LEA    VUMeterColors,A1
  8498.     CMP.L    TheRightColors(PC),A1
  8499.     BEQ.S    shcoed
  8500.     LEA    cedtxt2(PC),A0
  8501. shcoed    MOVEQ    #6,D0
  8502.     MOVE.W    #1483,D1
  8503.     BRA    ShowText3
  8504.  
  8505. cedtxt1    dc.b "VU-MTR"
  8506. cedtxt2 dc.b "ANALYZ"
  8507.  
  8508. RotOrSpread
  8509.     CMP.W    #16,D0
  8510.     BLO.S    RotColUp
  8511.     CMP.W    #32,D0
  8512.     BLO.S    RotColDown
  8513.     CMP.W    #79,D0
  8514.     BHS    SelectColor2
  8515.     BRA    SpreadColors
  8516.  
  8517. RotColUp
  8518.     CLR.W    SpreadFlag
  8519.     MOVE.L    TheRightColors(PC),A0
  8520.     MOVE.W    (A0),D0
  8521.     MOVE.W    ColorsMax(PC),D1
  8522.     SUBQ.W    #2,D1
  8523. rocoup1    MOVE.W    2(A0),(A0)+
  8524.     DBRA    D1,rocoup1
  8525.     MOVE.W    D0,(A0)
  8526. rocoup2    BSR    GetColPos
  8527.     BSR    ShowColSliders
  8528.     BSR    ShowRainbow
  8529.     BRA    SetupVUCols
  8530.  
  8531. RotColDown
  8532.     CLR.W    SpreadFlag
  8533.     MOVE.L    TheRightColors(PC),A0
  8534.     MOVE.W    ColorsMax(PC),D1
  8535.     ADD.W    D1,A0
  8536.     ADD.W    D1,A0
  8537.     MOVE.W    -(A0),D0
  8538.     SUBQ.W    #2,D1
  8539. rocodn1    MOVE.W    -2(A0),(A0)
  8540.     SUBQ.L    #2,A0
  8541.     DBRA    D1,rocodn1
  8542.     MOVE.W    D0,(A0)
  8543.     BRA.S    rocoup2
  8544.  
  8545. SpreadColors
  8546.     MOVE.W    RainbowPos,SpreadFrom
  8547.     MOVE.W    #1,SpreadFlag
  8548.     RTS
  8549.  
  8550. SpreadFrom    dc.w 0
  8551. SpreadFlag    dc.w 0
  8552.  
  8553. ColorGadgets2
  8554.     CLR.W    SpreadFlag
  8555.     CMP.W    #79,D0
  8556.     BHS.S    SetDefaultCol2
  8557.     CMP.W    #33,D0
  8558.     BHS.S    CancelCol2
  8559.     MOVE.L    UndoColAddr,A0
  8560.     MOVE.W    UndoCol,D1
  8561.     MOVE.W    (A0),UndoCol
  8562.     MOVE.W    D1,(A0)
  8563.     BRA    rocoup2
  8564.  
  8565. SetDefaultCol2
  8566.     MOVE.L    TheRightColors(PC),A0
  8567.     MOVE.L    A0,A1
  8568.     SUB.L    #SetupData,A1
  8569.     ADD.L    #DefaultSetupData,A1
  8570. sedeco4    MOVE.W    ColorsMax,D0
  8571.     BRA.S    sedeco3
  8572. sedeco2    MOVE.W    (A1)+,(A0)+
  8573. sedeco3    DBRA    D0,sedeco2
  8574.     BRA    rocoup2
  8575.  
  8576. CancelCol2
  8577.     MOVE.L    TheRightColors(PC),A0
  8578.     MOVE.L    A0,A1
  8579.     SUB.L    #VUMeterColors,A1
  8580.     ADD.L    #SaveColors,A1
  8581.     BRA.S    sedeco4
  8582.  
  8583. GetColAddr
  8584.     MOVE.L    TheRightColors(PC),A0
  8585.     MOVE.W    RainbowPos,D1
  8586.     ADD.W    D1,D1
  8587.     LEA    (A0,D1.W),A0
  8588.     MOVE.W    (A0),D1
  8589.     MOVE.W    D1,D2
  8590.     RTS
  8591.  
  8592. SetRed2    CMP.W    #79,D0
  8593.     BHS    SelectColor2
  8594. set2r2    BSR    GetColPos
  8595.     AND.W    #$0F00,D2
  8596.     LSR.W    #8,D2
  8597.     CMP.B    D2,D0
  8598.     BEQ.S    setrsk2
  8599.     AND.W    #$00FF,D1
  8600.     LSL.W    #8,D0
  8601.     OR.W    D0,D1
  8602.     MOVE.W    D1,(A0)
  8603.     BSR    ShowColSliders
  8604.     BSR    ShowRainbow
  8605.     BSR    SetupVUCols
  8606. setrsk2    BTST    #6,$BFE001
  8607.     BEQ.S    set2r2
  8608.     RTS
  8609.  
  8610. SetGreen2
  8611.     CMP.W    #79,D0
  8612.     BHS    SelectColor2
  8613. set2g2    BSR    GetColPos
  8614.     AND.W    #$00F0,D2
  8615.     LSR.W    #4,D2
  8616.     CMP.B    D2,D0
  8617.     BEQ.S    setgsk2
  8618.     AND.W    #$0F0F,D1
  8619.     LSL.W    #4,D0
  8620.     OR.W    D0,D1
  8621.     MOVE.W    D1,(A0)
  8622.     BSR    ShowColSliders
  8623.     BSR    ShowRainbow
  8624.     BSR    SetupVUCols
  8625. setgsk2    BTST    #6,$BFE001
  8626.     BEQ.S    set2g2
  8627.     RTS
  8628.  
  8629. SetBlue2
  8630.     CMP.W    #79,D0
  8631.     BHS.S    SelectColor2
  8632. set2b2    BSR    GetColPos
  8633.     AND.W    #$000F,D2
  8634.     CMP.B    D2,D0
  8635.     BEQ.S    setbsk2
  8636.     AND.W    #$0FF0,D1
  8637.     OR.W    D0,D1
  8638.     MOVE.W    D1,(A0)
  8639.     BSR    ShowColSliders
  8640.     BSR    ShowRainbow
  8641.     BSR    SetupVUCols
  8642. setbsk2    BTST    #6,$BFE001
  8643.     BEQ.S    set2b2
  8644.     RTS
  8645.  
  8646. SelectColor2
  8647.     MOVEQ    #0,D7
  8648. setcolp    BTST    #6,$BFE001
  8649.     BNE.S    ChkSpread
  8650.     MOVE.W    ColorsMax(PC),D0
  8651.     MOVE.W    MouseY,D1
  8652.     CMP.W    D7,D1
  8653.     BEQ.S    setcolp
  8654.     MOVE.W    D1,D7
  8655.     CMP.W    #37,D1
  8656.     BHS.S    setcoly
  8657.     MOVEQ    #37,D1
  8658. setcoly    SUB.W    #37,D1
  8659.     CMP.W    D0,D1
  8660.     BLT.S    setcol2
  8661.     MOVE.W    D0,D1
  8662.     SUBQ.W    #1,D1
  8663. setcol2    MOVE.W    D1,RainbowPos
  8664.     BSR    ShowRainbow
  8665.     BSR    GetColPos
  8666.     MOVE.L    A0,UndoColAddr
  8667.     MOVE.W    D1,UndoCol
  8668.     BSR    ShowColSliders
  8669.     BRA    setcolp
  8670.  
  8671. ChkSpread
  8672.     TST.W    SpreadFlag
  8673.     BEQ    Return1
  8674.     CLR.W    SpreadFlag
  8675.     BSR    GetColPos
  8676.     MOVE.W    SpreadFrom,D0
  8677.     MOVE.W    RainbowPos,D1
  8678.     CMP.W    D1,D0
  8679.     BLO.S    chkspr2
  8680.     EXG    D0,D1
  8681. chkspr2    MOVE.W    D1,D4
  8682.     SUB.W    D0,D4
  8683.     CMP.W    #1,D4
  8684.     BLS    Return1
  8685.     MOVE.L    D4,A2
  8686.     ADD.W    D4,D4
  8687.     MOVE.L    TheRightColors(PC),A0
  8688.     MOVE.L    A0,A1
  8689.     ADD.W    D0,D0
  8690.     ADD.W    D1,D1
  8691.     LEA    (A0,D0.W),A0    ; 1st col
  8692.     MOVE.W    (A0),D2
  8693.     LEA    (A1,D1.W),A1
  8694.     MOVE.W    (A1),D3        ; 2nd col
  8695.     MOVEQ    #0,D5
  8696.  
  8697. sprdlop    MOVE.W    D2,D0 ; red
  8698.     LSR.W    #8,D0
  8699.     MOVE.W    D3,D1
  8700.     LSR.W    #8,D1
  8701.     BSR    ColCrossfade
  8702.     LSL.W    #8,D0
  8703.     MOVE.W    D0,D7
  8704.     MOVE.W    D2,D0 ; green
  8705.     LSR.W    #4,D0
  8706.     AND.W    #$000F,D0
  8707.     MOVE.W    D3,D1
  8708.     LSR.W    #4,D1
  8709.     AND.W    #$000F,D1
  8710.     BSR    ColCrossfade
  8711.     LSL.W    #4,D0
  8712.     OR.W    D0,D7
  8713.     MOVE.W    D2,D0 ; blue
  8714.     AND.W    #$000F,D0
  8715.     MOVE.W    D3,D1
  8716.     AND.W    #$000F,D1
  8717.     BSR    ColCrossfade
  8718.     OR.W    D0,D7
  8719.     ADDQ.W    #2,D5
  8720.     MOVE.W    D7,(A0)+
  8721.     CMP.L    A1,A0
  8722.     BLO    sprdlop
  8723.     BRA    rocoup2
  8724.  
  8725. ColCrossfade
  8726.     MOVE.W    D4,D6
  8727.     SUB.W    D5,D6
  8728.     MULU    D6,D0
  8729.     ADD.L    A2,D0
  8730.     MULU    D5,D1
  8731.     ADD.W    D1,D0
  8732.     DIVU    D4,D0
  8733.     CMP.W    #15,D0
  8734.     BLS    Return1
  8735.     MOVEQ    #15,D0
  8736.     RTS
  8737.  
  8738. ShowRainbow
  8739.     MOVE.L    TextBplPtr,A0
  8740.     LEA    1490(A0),A0
  8741.     MOVEQ    #0,D1
  8742.     MOVE.L    #$00FFE000,D2
  8743.     MOVE.W    RainbowPos,D3
  8744. rainlop    MOVE.L    D2,D0
  8745.     CMP.W    D3,D1
  8746.     BNE.S    rainsk1
  8747.     MOVE.L    #$1EFFEF00,D0
  8748. rainsk1    MOVE.L    D0,(A0)
  8749.     LEA    40(A0),A0
  8750.     ADDQ.W    #1,D1
  8751.     CMP.W    #48,D1
  8752.     BLO.S    rainlop
  8753.     LEA    CopListAnalyzer,A0
  8754.     MOVE.L    TheRightColors(PC),A1
  8755.     MOVE.W    #$5107,D0
  8756.     MOVEQ    #47,D1
  8757.     MOVEQ    #0,D2
  8758. rainlp2    MOVE.W    D0,(A0)+
  8759.     MOVE.W    #$FFFE,(A0)+
  8760.     MOVE.W    #$018E,(A0)+
  8761.     CMP.W    ColorsMax(PC),D2
  8762.     BLO.S    rainsk2
  8763.     CLR.W    (A0)+
  8764.     BRA.S    rainsk3
  8765. rainsk2    MOVE.W    (A1)+,(A0)+
  8766. rainsk3    ADD.W    #$0100,D0
  8767.     ADDQ.W    #1,D2
  8768.     DBRA    D1,rainlp2
  8769.     MOVEQ    #63,D0
  8770. rainlp3    MOVE.L    #$01B80000,(A0)+
  8771.     DBRA    D0,rainlp3
  8772.     RTS
  8773.  
  8774. RainbowPos    dc.w    0
  8775. TheRightColors    dc.l    0
  8776. ColorsMax    dc.w    48
  8777.  
  8778. ;---- PT Decompacter ----
  8779.  
  8780. Decompact
  8781.     MOVE.L    A0,CompPtr
  8782.     MOVE.L    D0,CompLen
  8783.     BSR.S    FreeDecompMem
  8784.     MOVE.L    CompPtr(PC),A0
  8785.     MOVE.L    (A0),D0
  8786.     MOVE.L    D0,DecompMemSize
  8787.     MOVEQ    #0,D1
  8788.     MOVE.L    4.W,A6
  8789.     JSR    LVOAllocMem(A6)
  8790.     MOVE.L    D0,DecompMemPtr
  8791.     BEQ    OutOfMemErr
  8792.     MOVE.L    D0,A1
  8793.     MOVE.L    CompPtr(PC),A0
  8794.     MOVE.L    CompLen(PC),D0
  8795.     ADDQ.L    #4,A0
  8796.     SUBQ.L    #4,D0
  8797. dcmloop    MOVE.B    (A0)+,D1
  8798.     CMP.B    #181,D1
  8799.     BEQ.S    DecodeIt
  8800.     MOVE.B    D1,(A1)+
  8801. decom2    SUBQ.L    #1,D0
  8802.     CMP.L    #0,D0
  8803.     BGT.S    dcmloop
  8804.     MOVE.L    DecompMemPtr,A1
  8805.     MOVEQ    #-1,D0
  8806.     RTS
  8807.  
  8808. DecodeIt
  8809.     MOVEQ    #0,D1
  8810.     MOVE.B    (A0)+,D1
  8811.     MOVE.B    (A0)+,D2
  8812. dcdloop    MOVE.B    D2,(A1)+
  8813.     DBRA    D1,dcdloop
  8814.     SUBQ.L    #2,D0
  8815.     BRA.S    decom2
  8816.  
  8817. FreeDecompMem
  8818.     MOVE.L    DecompMemPtr,D0
  8819.     BEQ    Return1
  8820.     MOVE.L    D0,A1
  8821.     MOVE.L    DecompMemSize,D0
  8822.     MOVE.L    4.W,A6
  8823.     JSR    LVOFreeMem(A6)    
  8824.     CLR.L    DecompMemPtr
  8825.     RTS
  8826.  
  8827. CompPtr    dc.l    0
  8828. CompLen    dc.l    0
  8829.  
  8830. ;---- Position Insert/Delete Gadgets ----
  8831.  
  8832. PosInsDelGadgs
  8833.     MOVE.W    MouseY2,D0
  8834.     CMP.W    #11,D0
  8835.     BHS    Return1
  8836.     MOVE.W    MouseX2,D0
  8837.     CMP.W    #62,D0
  8838.     BHS    Return1
  8839.     CMP.W    #51,D0
  8840.     BHS.S    PosDelete
  8841.     CMP.W    #40,D0
  8842.     BHS.S    PosInsert
  8843.     RTS
  8844.  
  8845. PosInsert
  8846.     MOVE.L    SongDataPtr,A0
  8847.     LEA    sd_pattpos(A0),A0
  8848.     ADD.L    #126,A0
  8849.     MOVEQ    #127,D0
  8850.     MOVE.L    CurrPos,D1
  8851.     AND.L    #127,D1
  8852. posinloop
  8853.     MOVE.B    (A0),1(A0)
  8854.     SUBQ.L    #1,A0
  8855.     SUBQ.L    #1,D0
  8856.     CMP.L    D1,D0
  8857.     BHI.S    posinloop
  8858.     MOVE.B    PatternNumber+3,1(A0)
  8859.     BSR    PositionUp
  8860.     CLR.W    UpOrDown
  8861.     BSR    SongLengthGadg
  8862.     BRA    WaitForButtonUp
  8863.  
  8864. PosDelete
  8865.     MOVE.L    SongDataPtr,A0
  8866.     LEA    sd_pattpos(A0),A0
  8867.     MOVE.L    CurrPos,D0
  8868.     AND.L    #127,D0
  8869.     ADD.L    D0,A0
  8870. posdeloop
  8871.     MOVE.B    1(A0),(A0)
  8872.     ADDQ.L    #1,A0
  8873.     ADDQ.L    #1,D0
  8874.     CMP.L    #127,D0
  8875.     BLS.S    posdeloop
  8876.     CLR.B    -1(A0)
  8877.     BSR    ShowPosition
  8878.     MOVE.W    #-1,UpOrDown
  8879.     BSR    SongLengthGadg
  8880.     BRA    WaitForButtonUp
  8881.  
  8882. ;---- Enter number gadg ----
  8883.  
  8884. EnterNumGadg
  8885.     MOVE.W    MouseY2,D1
  8886.     CMP.W    #11,D1
  8887.     BLO    EnterPosGadg
  8888.     CMP.W    #22,D1
  8889.     BLO    EnterPattGadg
  8890.     CMP.W    #33,D1
  8891.     BLO    EnterLenGadg
  8892.     RTS
  8893.  
  8894. EnterPosGadg
  8895.     CLR.B    RawKeyCode
  8896.     MOVE.W    #76,LineCurX
  8897.     MOVE.W    #10,LineCurY
  8898.     MOVE.W    #169,TextOffset
  8899.     BSR    GetDec3Dig
  8900.     TST.W    AbortDecFlag
  8901.     BNE    pogskip
  8902.     CMP.W    #127,D0
  8903.     BLS.S    eposgok
  8904.     MOVEQ    #127,D0
  8905. eposgok    MOVE.L    D0,CurrPos
  8906.     BRA    pogskip
  8907.  
  8908. EnterPattGadg
  8909.     CLR.B    RawKeyCode
  8910.     MOVE.W    #84,LineCurX
  8911.     MOVE.W    #21,LineCurY
  8912.     MOVE.W    #610,TextOffset
  8913.     BSR    GetDecByte
  8914.     TST.W    AbortDecFlag
  8915.     BNE    pogskip
  8916.     CMP.B    #63,D0
  8917.     BLS.S    epgok
  8918.     MOVEQ    #63,D0
  8919. epgok    MOVE.L    SongDataPtr,A0
  8920.     LEA    sd_pattpos(A0),A0
  8921.     ADD.L    CurrPos,A0
  8922.     MOVE.B    D0,(A0)
  8923.     BRA    pogskip
  8924.  
  8925. EnterLenGadg
  8926.     CLR.B    RawKeyCode
  8927.     MOVE.W    #76,LineCurX
  8928.     MOVE.W    #32,LineCurY
  8929.     MOVE.W    #1049,TextOffset
  8930.     BSR    GetDec3Dig
  8931.     TST.W    AbortDecFlag
  8932.     BNE    ShowSongLength
  8933.     CMP.W    #128,D0
  8934.     BLS.S    elengok
  8935.     MOVE.B    #128,D0
  8936. elengok    MOVE.L    SongDataPtr,A0
  8937.     LEA    sd_numofpatt(A0),A0
  8938.     MOVE.B    D0,(A0)
  8939.     BRA    ShowSongLength
  8940.  
  8941. GetDec3Dig
  8942.     MOVE.W    #1,AbortDecFlag
  8943.     BSR    StorePtrCol
  8944.     BSR    SetWaitPtrCol
  8945.     BSR    UpdateLineCurPos
  8946. gd3loop    BSR    GetKey0_9
  8947.     CMP.W    #68,D1
  8948.     BEQ.S    gd3exit
  8949.     CMP.W    #2,D1
  8950.     BHI.S    gd3loop
  8951.     MOVE.W    D1,D0
  8952.     MULU    #100,D0
  8953.     MOVE.W    D0,gd3temp
  8954.     BSR    ShowOneDigit
  8955.     ADDQ.W    #8,LineCurX
  8956.     BSR    UpdateLineCurPos
  8957.     BSR    GetKey0_9
  8958.     CMP.B    #68,D1
  8959.     BEQ.S    gd3exit
  8960.     MOVE.W    D1,D0
  8961.     MULU    #10,D0
  8962.     ADD.W    D0,gd3temp
  8963.     BSR    ShowOneDigit
  8964.     ADDQ.W    #8,LineCurX
  8965.     BSR    UpdateLineCurPos
  8966.     BSR    GetKey0_9
  8967.     CMP.B    #68,D1
  8968.     BEQ.S    gd3exit
  8969.     ADD.W    D1,gd3temp
  8970.     CLR.W    AbortDecFlag
  8971. gd3exit    CLR.W    LineCurX
  8972.     MOVE.W    #270,LineCurY
  8973.     BSR    UpdateLineCurPos
  8974.     BSR    RestorePtrCol
  8975.     MOVEQ    #0,D0
  8976.     MOVE.W    gd3temp(PC),D0
  8977.     RTS
  8978.  
  8979. gd3temp    dc.w    0
  8980.  
  8981. ;----  Up/Down Gadgets ----
  8982.  
  8983. DownGadgets
  8984.     MOVE.W    #1,UpdateFreeMem
  8985.     MOVE.W    #-1,UpOrDown
  8986.     BRA.S    ug2
  8987.  
  8988. UpGadgets
  8989.     MOVE.W    #1,UpdateFreeMem
  8990.     CLR.W    UpOrDown
  8991. ug2    MOVE.W    MouseY2,D0
  8992.     CMP.W    #100,D0
  8993.     BHS    Return1
  8994.     CMP.W    #89,D0
  8995.     BHS    RepLenGadg
  8996.     CMP.W    #78,D0
  8997.     BHS    RepeatGadg
  8998.     CMP.W    #67,D0
  8999.     BHS    SampleLengthGadg
  9000.     CMP.W    #56,D0
  9001.     BHS    VolumeGadg
  9002.     CMP.W    #45,D0
  9003.     BHS    SampleNumGadg
  9004.     CMP.W    #34,D0
  9005.     BHS    FineTuneGadg
  9006.     CMP.W    #23,D0
  9007.     BHS    SongLengthGadg
  9008.     CMP.W    #12,D0
  9009.     BHS    PatternGadg
  9010.     TST.W    MouseY2
  9011.     BHS.S    PositionGadg
  9012.     RTS
  9013.  
  9014. PositionGadg
  9015.     TST.W    UpOrDown
  9016.     BMI.S    PositionDown
  9017. PositionUp
  9018.     ADDQ.L    #1,CurrPos
  9019.     BTST    #2,$DFF016
  9020.     BNE.S    pogskp2
  9021.     ADD.L    #9,CurrPos
  9022. pogskp2    CMP.L    #127,CurrPos
  9023.     BLS.S    pogskip
  9024.     MOVE.L    #127,CurrPos
  9025. pogskip    MOVE.L    CurrPos,SongPosition
  9026.     BSR    ShowPosition
  9027.     BSR    Wait_4000
  9028.     BSR    Wait_4000
  9029.     BRA    Wait_4000
  9030.  
  9031. PositionDown
  9032.     SUBQ.L    #1,CurrPos
  9033.     BTST    #2,$DFF016
  9034.     BNE.S    pogskp3
  9035.     SUB.L    #9,CurrPos
  9036. pogskp3    TST.L    CurrPos
  9037.     BPL.S    pogskip
  9038.     CLR.L    CurrPos
  9039.     BRA.S    pogskip
  9040.  
  9041. PatternGadg
  9042.     MOVE.L    SongDataPtr,A0
  9043.     LEA    sd_pattpos(A0),A0
  9044.     TST.W    UpOrDown
  9045.     BMI.S    PatternDown
  9046. PatternUp
  9047.     ADD.L    CurrPos,A0
  9048.     ADDQ.B    #1,(A0)
  9049.     BTST    #2,$DFF016
  9050.     BNE.S    pagaskp
  9051.     ADD.B    #9,(A0)
  9052. pagaskp    CMP.B    #63,(A0)
  9053.     BLS.S    pogskip
  9054.     MOVE.B    #63,(A0)
  9055.     BRA.S    pogskip
  9056.  
  9057. PatternDown
  9058.     ADD.L    CurrPos,A0
  9059.     SUBQ.B    #1,(A0)
  9060.     BTST    #2,$DFF016
  9061.     BNE.S    padoskp
  9062.     SUB.B    #9,(A0)
  9063. padoskp    TST.B    (A0)
  9064.     BPL    pogskip
  9065.     CLR.B    (A0)
  9066.     BRA    pogskip
  9067.  
  9068.  
  9069. SongLengthGadg
  9070.     MOVE.L    SongDataPtr,A0
  9071.     LEA    sd_numofpatt(A0),A0
  9072.     TST.W    UpOrDown
  9073.     BMI.S    SongLengthDown
  9074. SongLengthUp
  9075.     ADDQ.B    #1,(A0)
  9076.     BTST    #2,$DFF016
  9077.     BNE.S    slupskp
  9078.     ADD.B    #9,(A0)
  9079. slupskp    CMP.B    #127,(A0)
  9080.     BMI.S    solgskip
  9081.     MOVE.B    #127,(A0)
  9082. solgskip
  9083.     BSR    ShowSongLength
  9084.     BSR    Wait_4000
  9085.     BSR    Wait_4000
  9086.     BRA    Wait_4000
  9087.  
  9088. SongLengthDown
  9089.     SUBQ.B    #1,(A0)
  9090.     BTST    #2,$DFF016
  9091.     BNE.S    sldoskp
  9092.     SUB.B    #9,(A0)
  9093. sldoskp    CMP.B    #1,(A0)
  9094.     BGE.S    solgskip
  9095.     MOVE.B    #1,(A0)
  9096.     BRA.S    solgskip
  9097.  
  9098.  
  9099. SampleNumGadg
  9100.     BTST    #2,$DFF016    ; Check Right Mousebutton
  9101.     BNE.S    SampleNum2
  9102.     TST.W    InsNum
  9103.     BEQ    ShowSampleInfo
  9104.     MOVE.W    InsNum,LastInsNum
  9105.     CLR.W    InsNum
  9106.     BRA    ShowSampleInfo
  9107.  
  9108. SampleNum2
  9109.     TST.W    UpOrDown
  9110.     BMI.S    SampleNumDown
  9111. SampleNumUp
  9112.     ADDQ.W    #1,InsNum
  9113.     CMP.W    #31,InsNum
  9114.     BMI.S    snuskip
  9115.     MOVE.W    #31,InsNum
  9116. snuskip    BSR    redrsam
  9117.     BSR    Wait_4000
  9118.     BRA    Wait_4000
  9119.  
  9120. SampleNumDown
  9121.     TST.W    InsNum
  9122.     BEQ.S    snuskip
  9123.     SUBQ.W    #1,InsNum
  9124.     CMP.W    #1,InsNum
  9125.     BPL.S    snuskip
  9126.     MOVE.W    #1,InsNum
  9127.     BRA.S    snuskip
  9128.  
  9129. FineTuneGadg
  9130.     MOVE.L    SongDataPtr,A0
  9131.     LEA    12(A0),A0
  9132.     MOVE.W    InsNum,D0
  9133.     BEQ    Return1
  9134.     MULU    #30,D0
  9135.     ADD.L    D0,A0
  9136.     BTST    #2,$DFF016
  9137.     BNE.S    ftgskip
  9138.     CLR.B    2(A0)
  9139.     BRA.S    ftuskip
  9140. ftgskip    TST.W    UpOrDown
  9141.     BMI.S    FineTuneDown
  9142. FineTuneUp
  9143.     AND.B    #$0F,2(A0)
  9144.     CMP.B    #7,2(A0)
  9145.     BEQ.S    ftuskip
  9146.     ADDQ.B    #1,2(A0)
  9147.     AND.B    #$0F,2(A0)
  9148. ftuskip    BSR    ShowSampleInfo
  9149.     BSR    Wait_4000
  9150.     BRA    Wait_4000
  9151.  
  9152. FineTuneDown
  9153.     AND.B    #$0F,2(A0)
  9154.     CMP.B    #8,2(A0)
  9155.     BEQ.S    ftuskip
  9156.     SUBQ.B    #1,2(A0)
  9157.     AND.B    #$0F,2(A0)
  9158.     BRA.S    ftuskip
  9159.  
  9160.  
  9161. VolumeGadg
  9162.     MOVE.L    SongDataPtr,A0
  9163.     LEA    12(A0),A0
  9164.     MOVE.W    InsNum,D0
  9165.     BEQ    Return1
  9166.     MULU    #30,D0
  9167.     ADD.L    D0,A0
  9168.     TST.W    UpOrDown
  9169.     BMI.S    VolumeDown
  9170. VolumeUp
  9171.     ADDQ.B    #1,3(A0)
  9172.     BTST    #2,$DFF016
  9173.     BNE.S    voupskp
  9174.     ADD.B    #15,3(A0)
  9175. voupskp    CMP.B    #$40,3(A0)
  9176.     BLS.S    ftuskip
  9177.     MOVE.B    #$40,3(A0)
  9178.     BRA.S    ftuskip
  9179.  
  9180. VolumeDown
  9181.     SUBQ.B    #1,3(A0)
  9182.     BTST    #2,$DFF016
  9183.     BNE.S    vodoskp
  9184.     SUB.B    #15,3(A0)
  9185. vodoskp    TST.B    3(A0)
  9186.     BPL    ftuskip
  9187.     CLR.B    3(A0)
  9188.     BRA    ftuskip
  9189.  
  9190. SampleLengthGadg
  9191.     MOVE.W    #1,SampleLengthFlag
  9192.     MOVE.L    SongDataPtr,A0
  9193.     LEA    12(A0),A0
  9194.     MOVEQ    #0,D0
  9195.     MOVE.W    InsNum,D0
  9196.     BEQ    ShowSampleInfo
  9197.     MULU    #30,D0
  9198.     ADD.L    D0,A0
  9199.     TST.W    UpOrDown
  9200.     BMI.S    SampleLengthDown
  9201. SampleLengthUp
  9202.     ADDQ.W    #1,(A0)
  9203.     BTST    #2,$DFF016
  9204.     BNE.S    sluskip
  9205.     CMP.W    #$7FF0,(A0)
  9206.     BHS.S    sluskip
  9207.     ADDQ.W    #7,(A0)
  9208. sluskip    CMP.W    #$7FFF,(A0)
  9209.     BLO    ShowSampleInfo
  9210.     MOVE.W    #$7FFF,(A0)
  9211.     BRA    ShowSampleInfo
  9212.  
  9213. SampleLengthDown
  9214.     MOVE.W    4(A0),D0
  9215.     ADD.W    6(A0),D0
  9216.     SUBQ.W    #1,(A0)
  9217.     BTST    #2,$DFF016
  9218.     BNE.S    sldskip
  9219.     SUBQ.W    #7,(A0)
  9220. sldskip    BMI.S    sldskip2
  9221.     CMP.W    (A0),D0
  9222.     BLS    ShowSampleInfo
  9223.     MOVE.W    D0,(A0)
  9224.     BRA    ShowSampleInfo
  9225. sldskip2
  9226.     CLR.W    (A0)
  9227.     BRA    ShowSampleInfo
  9228.  
  9229. SampleLengthFlag dc.w 0
  9230.  
  9231. CheckSampleLength
  9232.     TST.W    SampleLengthFlag
  9233.     BEQ    Return1
  9234.     CLR.W    SampleLengthFlag
  9235.     MOVEQ    #0,D0
  9236.     MOVE.W    InsNum,D0
  9237.     BEQ    Return1
  9238.     MOVE.L    SongDataPtr,A0
  9239.     LEA    12(A0),A0
  9240.     MOVE.L    D0,D1
  9241.     LSL.W    #2,D1
  9242.     MULU    #30,D0
  9243.     ADD.L    D0,A0
  9244.     LEA    SamplePtrs,A1
  9245.     LEA    (A1,D1.W),A1
  9246.     MOVE.L    A0,PlaySamPtr
  9247.     MOVE.L    A1,RealSamPtr
  9248.     MOVE.L    124(A1),D0
  9249.     LSR.L    #1,D0
  9250.     MOVE.W    (A0),D1
  9251.     CMP.W    D0,D1
  9252.     BHI.S    ItsTooMuch
  9253.     RTS
  9254.  
  9255. ItsTooMuch
  9256.     LEA    AddWorkSpaceText(PC),A0
  9257.     BSR    AreYouSure
  9258.     BNE.S    RestoreLength
  9259.     BSR    TurnOffVoices
  9260.     MOVE.L    PlaySamPtr,A0
  9261.     MOVEQ    #0,D0
  9262.     MOVE.W    (A0),D0
  9263.     LSL.L    #1,D0
  9264.     MOVE.L    D0,SamAllocLen
  9265.     MOVE.L    #MEMF_CHIP!MEMF_CLEAR,D1
  9266.     MOVE.L    4.W,A6
  9267.     JSR    LVOAllocMem(A6)
  9268.     MOVE.L    D0,SamAllocPtr
  9269.     BEQ.S    RestoreLength
  9270.     MOVE.L    D0,A1
  9271.     MOVE.L    RealSamPtr,A0
  9272.     MOVE.L    (A0),D0
  9273.     BEQ.S    nosamth
  9274.     MOVE.L    D0,A2
  9275.     MOVE.L    124(A0),D1
  9276.     BEQ.S    nosamth
  9277.     SUBQ.L    #1,D1
  9278. cpsalop    MOVE.B    (A2)+,(A1)+
  9279.     DBRA    D1,cpsalop
  9280.     MOVE.L    (A0),A1
  9281.     MOVE.L    124(A0),D0
  9282.     MOVE.L    4.W,A6
  9283.     JSR    LVOFreeMem(A6)
  9284. nosamth    MOVE.L    RealSamPtr,A0
  9285.     MOVE.L    SamAllocPtr,(A0)
  9286.     MOVE.L    SamAllocLen,124(A0)
  9287.     BSR    ShowSampleInfo
  9288.     BSR    RedrawSample
  9289.     BRA    WaitForButtonUp
  9290.  
  9291. RestoreLength
  9292.     MOVE.L    PlaySamPtr,A0
  9293.     MOVE.L    RealSamPtr,A1
  9294.     MOVE.L    124(A1),D0
  9295.     LSR.L    #1,D0
  9296.     MOVE.W    D0,(A0)
  9297.     BRA    ShowSampleInfo
  9298.  
  9299. AddWorkSpaceText dc.b 'add workspace ?',0
  9300. PlaySamPtr  dc.l 0
  9301. RealSamPtr  dc.l 0
  9302. SamAllocPtr dc.l 0
  9303. SamAllocLen dc.l 0
  9304.  
  9305. RepeatGadg
  9306.     MOVE.L    SongDataPtr,A0
  9307.     LEA    12(A0),A0
  9308.     MOVEQ    #0,D0
  9309.     MOVE.W    InsNum,D0
  9310.     BEQ    ShowSampleInfo
  9311.     MULU    #30,D0
  9312.     ADD.L    D0,A0
  9313.     TST.W    UpOrDown
  9314.     BMI.S    RepeatDown
  9315. RepeatUp
  9316.     ADDQ.W    #1,4(A0)
  9317.     BTST    #2,$DFF016
  9318.     BNE.S    ruskip
  9319.     ADDQ.W    #7,4(A0)
  9320. ruskip    MOVE.W    (A0),D0        ;   Length
  9321.     BEQ.S    ruskip2
  9322.     SUB.W    6(A0),D0    ; - RepLen
  9323.     CMP.W    4(A0),D0
  9324.     BHI.S    ruskip2
  9325.     MOVE.W    D0,4(A0)
  9326. ruskip2    BSR    ShowSampleInfo
  9327.     BSR    UpdateRepeats
  9328.     BRA    SetLoopSprites2
  9329.  
  9330. RepeatDown
  9331.     SUBQ.W    #1,4(A0)
  9332.     BTST    #2,$DFF016
  9333.     BNE.S    rdskip
  9334.     SUBQ.W    #7,4(A0)
  9335. rdskip    TST.W    4(A0)
  9336.     BPL.S    ruskip2
  9337.     CLR.W    4(A0)
  9338.     BRA.S    ruskip2
  9339.  
  9340.  
  9341. RepLenGadg
  9342.     MOVE.L    SongDataPtr,A0
  9343.     LEA    12(A0),A0
  9344.     MOVEQ    #0,D0
  9345.     MOVE.W    InsNum,D0
  9346.     BEQ    ShowSampleInfo
  9347.     MULU    #30,D0
  9348.     ADD.L    D0,A0
  9349.     TST.W    UpOrDown
  9350.     BMI.S    RepLenDown
  9351. RepLenUp
  9352.     ADDQ.W    #1,6(A0)
  9353.     BTST    #2,$DFF016    ; Check Right Mousebutton
  9354.     BNE.S    rluskip
  9355.     ADDQ.W    #7,6(A0)
  9356. rluskip    MOVE.W    (A0),D0
  9357.     BEQ.S    ruskip2
  9358.     SUB.W    4(A0),D0
  9359.     CMP.W    6(A0),D0
  9360.     BHI.S    ruskip2
  9361.     BRA.S    rldskip
  9362.  
  9363. RepLenDown
  9364.     MOVEQ    #0,D0
  9365.     MOVE.W    6(A0),D0
  9366.     SUBQ.L    #1,D0
  9367.     BTST    #2,$DFF016
  9368.     BNE.S    rldskip
  9369.     SUBQ.L    #7,D0
  9370. rldskip    CMP.L    #1,D0
  9371.     BGE.S    rldskp2
  9372.     MOVEQ    #1,D0
  9373. rldskp2    MOVE.W    D0,6(A0)
  9374.     BRA    ruskip2
  9375.  
  9376. Wait_4000
  9377.     MOVE.W    #$4000,D0
  9378.     TST.B    HHFlag
  9379.     BEQ.S    wl_loop
  9380.     MOVE.W    #$FFFF,D0
  9381. wl_lop1    DBRA    D0,wl_lop1
  9382.     MOVE.W    #$A000,D0
  9383. wl_loop    DBRA    D0,wl_loop
  9384.     RTS
  9385.  
  9386. UpdateRepeats
  9387.     LEA    audchan1temp,A1
  9388.     LEA    $DFF0A0,A2
  9389.     LEA    ScopeInfo,A3
  9390.     BSR.S    upre2
  9391.     LEA    audchan2temp,A1
  9392.     LEA    $DFF0B0,A2
  9393.     LEA    ScopeInfo+20,A3
  9394.     BSR.S    upre2
  9395.     LEA    audchan3temp,A1
  9396.     LEA    $DFF0C0,A2
  9397.     LEA    ScopeInfo+40,A3
  9398.     BSR.S    upre2
  9399.     LEA    audchan4temp,A1
  9400.     LEA    $DFF0D0,A2
  9401.     LEA    ScopeInfo+60,A3
  9402. upre2    MOVE.W    InsNum,D0
  9403.     CMP.B    n_samplenum(A1),D0
  9404.     BNE    Return1
  9405.     MOVE.L    n_start(A1),A1
  9406.     MOVEQ    #0,D0
  9407.     MOVE.W    4(A0),D0    ; repeat
  9408.     ADD.L    D0,A1
  9409.     ADD.L    D0,A1
  9410.     MOVE.L    A1,(A2)
  9411.     MOVE.W    6(A0),D0
  9412.     MOVE.W    D0,4(A2)    ; replen
  9413.     MOVE.L    A1,ns_repeatptr(A3)
  9414.     ADD.L    D0,A1
  9415.     ADD.L    D0,A1
  9416.     MOVE.L    A1,ns_rependptr(A3)
  9417.     RTS
  9418.  
  9419. SetPatternPos
  9420.     MOVE.L    PatternPosition,D0
  9421.     LSR.L    #4,D0
  9422.     BRA.S    ssppskip
  9423.  
  9424. SetScrPatternPos
  9425.     MOVE.W    ScrPattPos,D0
  9426. ssppskip
  9427.     TST.W    SamScrEnable
  9428.     BNE    Return1
  9429.     MOVE.W    D0,PlayFromPos
  9430.     MULU    #7*40,D0
  9431.     MOVE.L    TextBplPtr,A0
  9432.     LEA    $15B8(A0),A0
  9433.     ADD.L    A0,D0
  9434.     MOVE.L    CopListBpl4Ptr(PC),A1
  9435.     MOVE.W    D0,6(A1)
  9436.     SWAP    D0
  9437.     MOVE.W    D0,2(A1)
  9438.     RTS
  9439.  
  9440. PlayFromPos    dc.w 0
  9441.  
  9442. WantedPattGadg
  9443.     TST.W    SamScrEnable
  9444.     BNE    CheckSamGadgets
  9445. TypeInWantedPatt
  9446.     CMP.W    #138,D1
  9447.     BHI.S    tiwp2
  9448.     CMP.W    #25,D0
  9449.     BHI    TempoGadg
  9450. tiwp2    CMP.L    #'patp',RunMode    ; not if a song is playing... 
  9451.     BEQ    Return1
  9452.     CLR.B    RawKeyCode
  9453.     MOVE.W    #12,LineCurX
  9454.     MOVE.W    #$0086,LineCurY
  9455.     MOVE.W    #5121,TextOffset
  9456.     BSR    GetDecByte
  9457.     TST.W    AbortDecFlag
  9458.     BNE.S    twexit
  9459.     MOVE.B    D0,PatternNumber+3
  9460.     CMP.L    #63,PatternNumber
  9461.     BLS.S    twexit
  9462.     MOVE.L    #63,PatternNumber
  9463. twexit    BRA    RedrawPattern
  9464.  
  9465. GetKey0_9
  9466.     BTST    #2,$DFF016
  9467.     BEQ.S    gk_ret
  9468.     MOVEQ    #0,D0
  9469.     BSR    DoKeyBuffer
  9470.     MOVE.B    RawKeyCode,D0
  9471.     BEQ.S    GetKey0_9
  9472.     CLR.B    RawKeyCode
  9473.     CMP.B    #68,D0
  9474.     BEQ.S    gk_ret
  9475.     CMP.B    #69,D0
  9476.     BEQ.S    gk_ret
  9477.     CMP.B    #10,D0
  9478.     BEQ.S    gk_end
  9479.     BHI.S    GetKey0_9
  9480.     CMP.B    #1,D0
  9481.     BLO.S    GetKey0_9
  9482.     MOVE.L    D0,D1
  9483.     RTS
  9484.  
  9485. gk_end    MOVEQ    #0,D1
  9486.     RTS
  9487.  
  9488. gk_ret    MOVEQ    #68,D1
  9489.     RTS
  9490.  
  9491. ShowOneDigit
  9492.     ADD.B    #'0',D1
  9493.     MOVE.B    D1,NumberText
  9494.     CLR.W    D1
  9495.     SWAP    D1
  9496.     MOVE.W    #1,TextLength
  9497.     MOVE.L    #NumberText,ShowTextPtr
  9498.     BSR    ShowText
  9499.     CLR.L    NumberText
  9500.     CLR.W    WordNumber
  9501.     RTS
  9502.  
  9503. ;---- Get Text Line ----
  9504.  
  9505. GetTextLine
  9506.     MOVEQ    #0,D0
  9507.     MOVE.W    A4,D0
  9508.     DIVU    #40,D0
  9509.     ADDQ.W    #5,D0
  9510.     MOVE.W    D0,LineCurY
  9511.     SWAP    D0
  9512.     LSL.W    #3,D0
  9513.     ADDQ.W    #4,D0
  9514.     MOVE.W    D0,LineCurX
  9515.     BSR    UpdateLineCurPos
  9516.     MOVE.L    ShowTextPtr,DSTPtr
  9517.     CLR.L    DSTOffset
  9518.     CLR.L    DSTPos
  9519.     MOVE.W    #1,GetLineFlag
  9520.     MOVE.L    A4,A5
  9521.     MOVE.W    LineCurX,D5
  9522.     CLR.B    RawKeyCode
  9523.     BSR    UpdateText
  9524. WaitForKey
  9525.     BTST    #2,$DFF016
  9526.     BEQ    AbortGetLine
  9527.     BTST    #6,$BFE001
  9528.     BEQ    LineClicked
  9529.     BSR    DoKeyBuffer
  9530.     MOVEQ    #0,D1
  9531.     MOVE.B    RawKeyCode,D1
  9532.     BEQ.S    WaitForKey
  9533.     CMP.B    #78,D1
  9534.     BEQ    MoveCharRight
  9535.     CMP.B    #79,D1
  9536.     BEQ    MoveCharLeft
  9537.     CMP.B    #70,D1
  9538.     BEQ    DeleteChar
  9539.     CMP.B    #65,D1
  9540.     BEQ    BackspaceChar
  9541.     CMP.B    #68,D1
  9542.     BEQ    GetLineReturn
  9543.     CMP.B    #69,D1
  9544.     BEQ    GetLineReturn
  9545.     BTST    #7,D1
  9546.     BNE.S    WaitForKey
  9547.     LEA    UnshiftedKeymap,A4
  9548.     TST.W    ShiftKeyStatus
  9549.     BEQ.S    gtlskip
  9550.     LEA    ShiftedKeymap,A4
  9551. gtlskip    AND.W    #$007F,D1
  9552.     CMP.B    #64,D1
  9553.     BHI.S    WaitForKey
  9554.     MOVE.B    (A4,D1.W),D1
  9555.     BEQ.S    WaitForKey
  9556.     TST.B    EnterTextFlag
  9557.     BEQ.S    TextLineKey
  9558.     CMP.B    #'0',D1
  9559.     BLO    WaitForKey
  9560.     CMP.B    #'f',D1
  9561.     BHI    WaitForKey
  9562.     CMP.B    #'a',D1
  9563.     BHS.S    TextLineKey
  9564.     CMP.B    #'9',D1
  9565.     BHI    WaitForKey
  9566. TextLineKey
  9567.     CMP.L    TextEndPtr,A6
  9568.     BEQ    WaitForKey
  9569.     MOVE.L    TextEndPtr,A4
  9570. tlkloop    MOVE.B    -(A4),1(A4)
  9571.     CMP.L    A4,A6
  9572.     BNE.S    tlkloop
  9573.     MOVE.L    TextEndPtr,A4
  9574.     CLR.B    (A4)
  9575.     MOVE.B    D1,(A6)+
  9576.     BSR    PosMoveRight
  9577.     BSR    UpdateText
  9578.     CLR.B    RawKeyCode
  9579.     BRA    WaitForKey
  9580.  
  9581. LineClicked
  9582.     MOVE.W    MouseY,D1
  9583.     SUB.W    LineCurY,D1
  9584.     CMP.W    #2,D1
  9585.     BGT    GetLineReturn
  9586.     CMP.W    #-8,D1
  9587.     BLT    GetLineReturn
  9588.     MOVE.W    MouseX,D1
  9589.     SUB.W    LineCurX,D1
  9590.     ADDQ.W    #4,D1
  9591.     ASR.W    #3,D1
  9592.     BEQ    WaitForKey
  9593.     BPL.S    linclri
  9594.  
  9595.     CMP.L    DSTPtr(PC),A6
  9596.     BEQ    WaitForKey
  9597.     SUBQ.L    #1,A6
  9598.     BSR    PosMoveLeft
  9599. upwake2    BSR    UpdateText
  9600.     BRA    WaitForKey
  9601.  
  9602. linclri    CMP.L    TextEndPtr,A6
  9603.     BEQ    WaitForKey
  9604.     TST.B    (A6)
  9605.     BEQ    WaitForKey
  9606.     ADDQ.L    #1,A6
  9607.     BSR    PosMoveRight
  9608.     BRA.S    upwake2
  9609.  
  9610. PosMoveRight
  9611.     MOVE.L    DSTPos,D0
  9612.     MOVEQ    #0,D1
  9613.     MOVE.W    TextLength,D1
  9614.     TST.B    EnterTextFlag
  9615.     BNE.S    pmrskip
  9616.     SUBQ.W    #1,D1
  9617. pmrskip    CMP.L    D1,D0
  9618.     BLO.S    posrok
  9619.     ADDQ.L    #1,DSTOffset
  9620.     BRA    UpdateLineCurPos
  9621. posrok    ADDQ.L    #1,DSTPos
  9622.     ADDQ.W    #8,LineCurX
  9623.     BRA    UpdateLineCurPos
  9624.  
  9625. PosMoveLeft
  9626.     TST.L    DSTPos
  9627.     BNE.S    poslok
  9628.     SUBQ.L    #1,DSTOffset
  9629.     BRA    UpdateLineCurPos    
  9630. poslok    SUBQ.L    #1,DSTPos
  9631.     SUBQ.W    #8,LineCurX
  9632.     BRA    UpdateLineCurPos
  9633.  
  9634. BackspaceChar
  9635.     CMP.L    DSTPtr(PC),A6
  9636.     BEQ    WaitForKey
  9637.     SUBQ.L    #1,A6
  9638.     MOVE.L    A6,A4
  9639. dobaloop
  9640.     MOVE.B    1(A4),(A4)+
  9641.     CMP.L    TextEndPtr,A4
  9642.     BNE.S    dobaloop
  9643.     BSR    PosMoveLeft
  9644. upwake    BSR    UpdateText
  9645.     BSR    Wait_4000
  9646.     BSR    Wait_4000
  9647.     BSR    Wait_4000
  9648.     BRA    WaitForKey
  9649.  
  9650. DeleteChar
  9651.     MOVE.L    A6,A4
  9652. dechloop
  9653.     MOVE.B    1(A4),(A4)+
  9654.     CMP.L    TextEndPtr,A4
  9655.     BLO.S    dechloop
  9656.     BRA.S    upwake
  9657.  
  9658. MoveCharRight
  9659.     CMP.L    TextEndPtr,A6
  9660.     BEQ    WaitForKey
  9661.     TST.B    (A6)
  9662.     BEQ    WaitForKey
  9663.     ADDQ.L    #1,A6
  9664.     BSR    PosMoveRight
  9665.     BRA.S    upwake
  9666.  
  9667. MoveCharLeft
  9668.     CMP.L    DSTPtr(PC),A6
  9669.     BEQ    WaitForKey
  9670.     SUBQ.L    #1,A6
  9671.     BSR    PosMoveLeft
  9672.     BRA.S    upwake
  9673.  
  9674. GetLineReturn
  9675.     MOVE.L    DSTPtr,A6
  9676.     CMP.B    #1,EnterTextFlag
  9677.     BNE.S    gtl_rskip
  9678.     TST.B    DiskNumText2
  9679.     BEQ    WaitForKey
  9680. gtl_rskip
  9681.     CMP.B    #3,EnterTextFlag
  9682.     BNE.S    gtl_rskip2
  9683.     TST.B    SndDiskNum1
  9684.     BEQ    WaitForKey
  9685. gtl_rskip2
  9686.     MOVE.L    A6,A4
  9687. dlrloop    TST.B    (A4)+
  9688.     BNE.S    dlrloop
  9689.     SUBQ.L    #1,A4
  9690. dlrloop2
  9691.     CMP.L    TextEndPtr,A4
  9692.     BHS.S    dlrexit
  9693.     CLR.B    (A4)+
  9694.     BRA.S    dlrloop2
  9695.  
  9696. dlrexit    CLR.W    LineCurX
  9697.     MOVE.W    #270,LineCurY
  9698.     BSR    UpdateLineCurPos
  9699.     CLR.W    GetLineFlag
  9700.     MOVE.B    RawKeyCode,MixChar
  9701.     CLR.B    RawKeyCode
  9702.     CLR.L    DSTOffset
  9703.     BSR.S    UpdateText
  9704.     BRA    WaitForButtonUp
  9705.  
  9706. AbortGetLine
  9707.     MOVE.L    DSTPtr,A6
  9708.     MOVE.L    A6,A4
  9709. clliloop
  9710.     CLR.B    (A4)+
  9711.     CMP.L    TextEndPtr,A4
  9712.     BNE.S    clliloop
  9713.     BSR.S    UpdateText
  9714.     BRA    GetLineReturn
  9715.  
  9716. UpdateText
  9717.     MOVE.W    A5,TextOffset
  9718.     MOVE.L    DSTPtr,A0
  9719.     ADD.L    DSTOffset,A0
  9720.     BRA    ShowText2
  9721.  
  9722. DSTPtr        dc.l    0
  9723. DSTPos        dc.l    0
  9724. DSTOffset    dc.l    0
  9725.  
  9726. ;----
  9727.  
  9728. TypeInSongName
  9729.     BSR    StorePtrCol
  9730.     BSR    SetWaitPtrCol
  9731.     CLR.L    EditMode
  9732.     MOVE.L    SongDataPtr,A6
  9733.     MOVE.L    A6,TextEndPtr
  9734.     MOVE.L    A6,ShowTextPtr
  9735.     ADD.L    #19,TextEndPtr
  9736.     MOVE.W    #20,TextLength
  9737.     MOVE.W    #4133,A4
  9738.     BSR    GetTextLine
  9739.     CLR.L    TextEndPtr
  9740.     BRA    RestorePtrCol
  9741.  
  9742. CheckSmplNamOrLoad
  9743.     CMP.W    #287,MouseX2
  9744.     BHS    LoadNamedSample
  9745. TypeInSampleName
  9746.     BSR    StorePtrCol
  9747.     BSR    SetWaitPtrCol
  9748.     CLR.L    EditMode
  9749.     MOVE.L    SongDataPtr,A6
  9750.     LEA    -10(A6),A6
  9751.     MOVE.W    InsNum,D7
  9752.     BNE.S    tisnskip
  9753.     MOVE.W    LastInsNum,D7
  9754. tisnskip
  9755.     MULU    #30,D7
  9756.     ADD.L    D7,A6
  9757.     MOVE.L    A6,TextEndPtr
  9758.     MOVE.L    A6,ShowTextPtr
  9759.     ADD.L    #21,TextEndPtr
  9760.     MOVE.W    #22,TextLength
  9761.     MOVE.W    #4573,A4
  9762.     BSR    GetTextLine
  9763.     CLR.L    TextEndPtr
  9764.     BRA    RestorePtrCol
  9765.  
  9766. LoadSample
  9767.     TST.W    InsNum
  9768.     BEQ    NotSampleNull
  9769.     BSR    StorePtrCol
  9770.     LEA    SamplePath2,A0
  9771.     BSR    CopyPath
  9772.     LEA    DirInputName,A0
  9773.     MOVEQ    #DirNameLength-1,D0
  9774. lsloop    MOVE.B    (A0)+,(A1)+
  9775.     DBRA    D0,lsloop
  9776.     MOVE.L    SongDataPtr,A0
  9777.     MOVE.W    InsNum,D0
  9778.     MULU    #30,D0
  9779.     LEA    -10(A0),A0
  9780.     ADD.L    D0,A0
  9781.     LEA    DirInputName,A1
  9782.     MOVEQ    #21,D0
  9783. lsloop2    MOVE.B    (A1)+,(A0)+
  9784.     DBRA    D0,lsloop2
  9785.     BSR    SetDiskPtrCol
  9786.     MOVE.L    #FileName,D1
  9787.     BSR    ExamineAndAlloc
  9788.     BEQ    ErrorRestoreCol
  9789.     MOVE.L    #FileName,D1
  9790.     BRA    lnssec2
  9791.  
  9792. CheckForIFF2 ; load loop
  9793.     MOVEQ    #-1,D2
  9794.     BRA.S    ciff2
  9795. CheckForIFF
  9796.     MOVEQ    #0,D2
  9797. ciff2    MOVEQ    #0,D1
  9798.     CMP.L    #'FORM',(A0)
  9799.     BNE.S    wiskip
  9800.     CMP.L    #'8SVX',8(A0)
  9801.     BNE.S    wiskip
  9802.     MOVE.L    A0,A2
  9803.     MOVE.L    A1,D0
  9804.     ADD.L    A0,A1
  9805.     TST.L    D2
  9806.     BEQ.S    cfiloop
  9807.     BSR.S    CheckIFFLoop
  9808. cfiloop    CMP.L    #'BODY',(A0)
  9809.     BEQ.S    wasiff
  9810.     ADDQ.L    #2,A0
  9811.     CMP.L    A1,A0
  9812.     BLS.S    cfiloop
  9813.     RTS
  9814.  
  9815. WasIFF    ADDQ.L    #8,A0
  9816.     ADD.L    A2,D0
  9817.     SUB.L    A0,D0
  9818. wiloop    MOVE.B    (A0)+,(A2)+
  9819.     CMP.L    A1,A0
  9820.     BLS.S    wiloop
  9821.     MOVE.L    SampleInstrSave(PC),A3
  9822.     LSR.W    #1,D0
  9823.     MOVE.W    22(A3),D1
  9824.     SUB.W    D0,D1
  9825.     MOVE.W    D0,22(A3)
  9826. wiskip    LEA    SampleLengthAdd(PC),A3
  9827.     MOVE.W    InsNum,D0
  9828.     LSL.W    #1,D0
  9829.     MOVE.W    D1,(A3,D0.W)
  9830.     RTS
  9831.  
  9832. CheckIFFLoop
  9833.     TST.B    IFFLoopFlag
  9834.     BEQ    Return2
  9835.     MOVEM.L    A0/D0,-(SP)
  9836. cilloop    CMP.L    #'VHDR',(A0)
  9837.     BEQ.S    wasvhdr
  9838.     ADDQ.L    #2,A0
  9839.     CMP.L    A1,A0
  9840.     BLS.S    cilloop
  9841. cilend    MOVEM.L    (SP)+,A0/D0
  9842.     RTS
  9843.  
  9844. wasvhdr    MOVE.L    SampleInstrSave(PC),A3
  9845.     MOVE.L    12(A0),D0
  9846.     BEQ.S    cilend
  9847.     LSR.W    #1,D0
  9848.     MOVE.W    D0,28(A3)
  9849.     MOVE.L    8(A0),D0
  9850.     BNE.S    wsvhdr2
  9851.     MOVEQ    #2,D0
  9852. wsvhdr2    LSR.W    #1,D0
  9853.     MOVE.W    D0,26(A3)
  9854.     BRA.S    cilend
  9855.  
  9856.  
  9857. SampleInstrSave    dc.l    0
  9858. SampleLengthAdd    dcb.w    32,0
  9859.  
  9860. ExamineAndAlloc
  9861.     MOVEQ    #-2,D2
  9862.     MOVE.L    DOSBase,A6
  9863.     JSR    LVOLock(A6)
  9864.     MOVE.L    D0,FileLock
  9865.     BEQ    CantFindFile
  9866.     MOVE.L    D0,D1
  9867.     MOVE.L    #FileInfoBlock,D2
  9868.     JSR    LVOExamine(A6)
  9869.     TST.L    FIB_EntryType
  9870.     BPL    CantExamFile
  9871.     MOVE.L    FileLock,D1
  9872.     JSR    LVOUnLock(A6)
  9873.     MOVE.L    FIB_FileSize,D0
  9874.     BEQ    FileIsEmpty
  9875.     BSR    TurnOffVoices
  9876.     BSR    FreeSample
  9877.     MOVE.L    FIB_FileSize,D0
  9878.     CMP.L    #$FFFE,D0
  9879.     BLS.S    exalloc
  9880.     MOVE.L    #$FFFE,D0
  9881. exalloc    LEA    SamplePtrs,A4
  9882.     MOVE.W    InsNum,D1
  9883.     LSL.W    #2,D1
  9884.     ADD.W    D1,A4
  9885.     MOVE.L    D0,124(A4)
  9886.     MOVE.L    D0,DiskDataLength
  9887.     MOVE.L    4.W,A6
  9888.     MOVE.L    #MEMF_CHIP!MEMF_CLEAR,D1
  9889.     JSR    LVOAllocMem(A6)
  9890.     MOVE.L    D0,DiskDataPtr
  9891.     MOVE.L    D0,(A4)
  9892.     BEQ    OutOfMemErr
  9893.     LEA    LoadingSampleText(PC),A0
  9894.     BSR    ShowStatusText
  9895.     MOVE.L    SongDataPtr,A0
  9896.     MOVE.W    InsNum,D0
  9897.     MULU    #30,D0
  9898.     LEA    -10(A0),A0
  9899.     ADD.L    D0,A0
  9900.     MOVE.L    A0,SampleInstrSave
  9901.     MOVE.L    DiskDataLength,D0
  9902.     LSR.L    #1,D0
  9903.     MOVE.W    D0,22(A0)
  9904.     MOVE.L    #$00400000,24(A0)
  9905.     MOVE.W    #1,28(A0)
  9906.     BSR    ShowSampleInfo
  9907.     MOVEQ    #-1,D0
  9908.     RTS
  9909.  
  9910. LoadNamedSample
  9911.     TST.W    InsNum
  9912.     BEQ    NotSampleNull
  9913.     BSR    StorePtrCol
  9914.     BSR    CreateSampleName
  9915.     BSR    SetDiskPtrCol
  9916.     MOVE.L    FileNamePtr,D1
  9917.     BSR    ExamineAndAlloc
  9918.     BEQ    Return2
  9919.     MOVE.L    FileNamePtr,D1
  9920. lnssec2    MOVE.L    DOSbase(PC),A6
  9921.     MOVE.L    #1005,D2
  9922.     JSR    LVOOpen(A6)
  9923.     MOVE.L    D0,D7
  9924.     BEQ    CantOpenFile
  9925.     MOVE.L    D0,D1
  9926.     MOVE.L    DiskDataPtr,D2
  9927.     MOVE.L    DiskDataLength,D3
  9928.     JSR    LVORead(A6)
  9929.     MOVE.L    D7,D1
  9930.     JSR    LVOClose(A6)
  9931.     MOVE.L    DiskDataPtr,A0
  9932.     MOVE.L    DiskDataLength,A1
  9933.     BSR    CheckForIFF2
  9934.     BSR    ValidateLoops
  9935.     BSR    ShowSampleInfo
  9936.     MOVE.L    DiskDataPtr,A0
  9937.     CLR.W    (A0)
  9938.     BSR    RedrawSample
  9939.     CLR.L    SavSamInf
  9940.     BSR    ShowAllRight
  9941.     BRA    RestorePtrCol
  9942.  
  9943. CreateSampleName
  9944.     LEA    SampleFileName,A0
  9945.     MOVEQ    #27,D0
  9946. csnloop    CLR.B    (A0)+
  9947.     DBRA    D0,csnloop
  9948.     MOVE.L    SongDataPtr,A0
  9949.     MOVE.W    InsNum,D0
  9950.     MULU    #30,D0
  9951.     LEA    -10(A0),A0
  9952.     ADD.L    D0,A0
  9953.     MOVE.L    A0,SampleInstrSave
  9954.     MOVEQ    #0,D0
  9955.     MOVE.W    22(A0),D0
  9956.     ADD.L    D0,D0
  9957.     MOVE.L    D0,DiskDataLength
  9958.     MOVE.L    D0,IFFBODY+4
  9959.     ADD.L    #IFFEND-IFFFORM-8,D0
  9960.     MOVE.L    D0,IFFFORM+4
  9961.  
  9962.     MOVEQ    #0,D0
  9963.     MOVE.W    22(A0),D0
  9964.     ADD.L    D0,D0
  9965.     MOVEQ    #0,D1
  9966.     MOVE.W    28(A0),D1
  9967.     CMP.W    #1,D1
  9968.     BLS.S    csnskp2
  9969.     ADD.L    D1,D1
  9970.     MOVEQ    #0,D0
  9971.     MOVE.W    26(A0),D0
  9972.     ADD.L    D0,D0
  9973.     BRA.S    csnskp3
  9974. csnskp2    MOVEQ    #0,D1
  9975. csnskp3    MOVE.L    D0,IFFVHDR+8
  9976.     MOVE.L    D1,IFFVHDR+12
  9977.  
  9978.     LEA    SampleFileName,A1
  9979.     LEA    IFFNAME+8,A2
  9980.     MOVEQ    #21,D0
  9981. csnloop2
  9982.     MOVE.B    (A0),(A1)+
  9983.     MOVE.B    (A0)+,(A2)+
  9984.     DBRA    D0,csnloop2
  9985.     MOVE.L    #SampleFileName,D1
  9986.     MOVE.L    D1,FileNamePtr
  9987.     BSR.S    FindColon
  9988.     BEQ.S    CheckOverride
  9989.     LEA    SamplePath2,A0
  9990.     BSR    CopyPath
  9991.     MOVE.L    #SampleFileName,A0
  9992. csnloop3
  9993.     MOVE.B    (A0)+,(A1)+
  9994.     BNE.S    csnloop3
  9995.     MOVE.L    #FileName,FileNamePtr
  9996.     RTS
  9997.  
  9998. FindColon
  9999.     MOVE.L    D1,A0
  10000. fcloop    MOVE.B    (A0)+,D0
  10001.     BEQ.S    FindColonFail
  10002.     CMP.B    #':',D0
  10003.     BEQ.S    FindColonSuccess
  10004.     BRA.S    fcloop
  10005.  
  10006. FindColonFail
  10007.     MOVEQ    #-1,D0
  10008.     RTS
  10009.  
  10010. FindColonSuccess
  10011.     MOVEQ    #0,D0
  10012.     RTS
  10013.  
  10014. CheckOverride
  10015.     TST.B    OverrideFlag
  10016.     BEQ    Return2
  10017.     MOVE.L    #SampleFileName,A0
  10018.     MOVE.L    A0,A1
  10019.     LEA    21(A1),A1
  10020.     MOVE.L    A1,A2
  10021. chkovlp    MOVE.B    -(A1),D0
  10022.     CMP.B    #':',D0
  10023.     BEQ.S    chkovok
  10024.     CMP.B    #'/',D0
  10025.     BEQ.S    chkovok
  10026.     MOVE.L    A1,A2
  10027.     CMP.L    A0,A1
  10028.     BHI.S    chkovlp
  10029. chkovok    LEA    SamplePath2,A0
  10030.     BSR    CopyPath
  10031. chkovl2    MOVE.B    (A2)+,(A1)+
  10032.     BNE.S    chkovl2
  10033.     MOVE.L    #FileName,FileNamePtr
  10034.     RTS
  10035.  
  10036. ValidateLoops
  10037.     MOVE.L    SongDataPtr,A0
  10038.     LEA    20(A0),A0
  10039.     MOVEQ    #30,D0
  10040. valolop    MOVE.W    22(A0),D1
  10041.     MOVE.W    26(A0),D2
  10042.     MOVE.W    28(A0),D3
  10043.     CMP.W    D1,D2
  10044.     BHS.S    valosk1
  10045.     ADD.W    D2,D3
  10046.     CMP.W    D1,D3
  10047.     BHI.S    valosk2
  10048. valoque    TST.W    28(A0)
  10049.     BNE.S    valosk3
  10050.     MOVE.W    #1,28(A0)
  10051. valosk3    LEA    30(A0),A0
  10052.     DBRA    D0,valolop
  10053.     RTS
  10054. valosk2    SUB.W    D2,D1
  10055.     MOVE.W    D1,28(A0)
  10056.     BRA.S    valoque
  10057. valosk1    MOVEQ    #1,D1
  10058.     MOVE.L    D1,26(A0)
  10059.     BRA.S    valoque
  10060.  
  10061. LoadPreset
  10062.     CLR.B    RawKeyCode
  10063.     TST.W    InsNum
  10064.     BEQ    NotSampleNull
  10065.     BSR    TurnOffVoices
  10066.     BSR    FreeSample
  10067.     BSR    CreateSampleName
  10068.     MOVE.L    FileNamePtr,A0
  10069.     TST.B    (A0)
  10070.     BEQ    Return2
  10071.     MOVE.L    DiskDataLength(PC),D0
  10072.     BEQ    Return2
  10073.     MOVE.L    DiskDataLength(PC),D0
  10074.     BSR    AllocSample
  10075.     MOVE.L    DiskDataPtr(PC),D0
  10076.     BEQ.S    loprerr
  10077.     BSR    ShowSampleInfo
  10078.     BSR    DoLoadData
  10079.     BSR    ShowAllRight
  10080.     MOVE.L    DiskDataPtr(PC),A0
  10081.     MOVE.L    DiskDataLength(PC),A1
  10082.     BSR    CheckForIFF
  10083.     BSR    ValidateLoops
  10084.     BSR    ShowSampleInfo
  10085.     MOVE.L    DiskDataPtr(PC),A0
  10086.     CLR.W    (A0)
  10087.     BSR    RedrawSample
  10088.     MOVE.W    #1,UpdateFreeMem
  10089.     RTS
  10090.  
  10091. loprerr    BSR    StorePtrCol
  10092.     BSR    OutOfMemErr
  10093.     BSR    RestorePtrCol
  10094.     BRA    RedrawSample
  10095.  
  10096. AllocSample
  10097.     MOVE.L    D0,-(SP)
  10098.     MOVE.L    #MEMF_CHIP!MEMF_CLEAR,D1
  10099.     MOVE.L    4.W,A6
  10100.     JSR    LVOAllocMem(A6)
  10101.     MOVE.L    D0,DiskDataPtr
  10102.     LEA    SamplePtrs(PC),A0
  10103.     MOVE.W    InsNum(PC),D1
  10104.     LSL.W    #2,D1
  10105.     LEA    (A0,D1.W),A0
  10106.     MOVE.L    DiskDataPtr(PC),(A0)
  10107.     MOVE.L    (SP)+,124(A0)
  10108.     RTS
  10109.  
  10110. FreeSample
  10111.     LEA    SamplePtrs(PC),A0
  10112.     MOVE.W    InsNum(PC),D0
  10113.     BEQ    Return2
  10114.     LSL.W    #2,D0
  10115.     LEA    (A0,D0.W),A0
  10116.     MOVE.L    (A0),D1
  10117.     BEQ    Return2
  10118.     CLR.L    (A0)
  10119.     MOVE.L    124(A0),D0
  10120.     CLR.L    124(A0)
  10121.     MOVE.L    D1,A1
  10122.     MOVE.L    4.W,A6
  10123.     JSR    LVOFreeMem(A6)
  10124.     RTS
  10125.  
  10126. NotSampleNull
  10127.     LEA    NotSample0Text(PC),A0
  10128.     BSR    ShowStatusText
  10129.     BRA    SetErrorPtrCol
  10130.  
  10131. NotSample0Text    dc.b 'not sample 0 !',0,0
  10132.  
  10133. ;----
  10134.  
  10135. DeleteSong
  10136.     LEA    DeleteSongText,A0
  10137.     BSR    AreYouSure
  10138.     BNE    Return2
  10139.     LEA    DeletingSongText(PC),A0
  10140.     BSR    ShowStatusText
  10141.     LEA    SongsPath2,A0
  10142.     BSR    CopyPath
  10143.     LEA    DirInputName,A0
  10144.     MOVEQ    #DirNameLength-1,D0
  10145. dsloop    MOVE.B    (A0)+,(A1)+
  10146.     DBRA    D0,dsloop
  10147.     MOVE.W    #1,Action
  10148. Delete3    MOVE.L    #FileName,FileNamePtr
  10149.     MOVE.L    DOSbase(PC),A6
  10150.     MOVE.L    FileNamePtr(PC),D1
  10151.     MOVE.L    D1,A0
  10152.     JSR    LVODeleteFile(A6)
  10153.     BSR    ClearFileNames
  10154.     BSR    ShowAllRight
  10155.     BSR    SetNormalPtrCol
  10156.     BSR    StorePtrCol
  10157.     BRA    DoAutoDir
  10158.     
  10159. DeleteModule
  10160.     LEA    DeleteModuleText,A0
  10161.     BSR    AreYouSure
  10162.     BNE    Return2
  10163.     LEA    DeletingModuleText(PC),A0
  10164.     BSR    ShowStatusText
  10165.     LEA    ModulesPath2,A0
  10166.     BSR    CopyPath
  10167.     LEA    DirInputName,A0
  10168.     MOVEQ    #DirNameLength-1,D0
  10169. dmdloop    MOVE.B    (A0)+,(A1)+
  10170.     DBRA    D0,dmdloop
  10171.     MOVE.W    #3,Action
  10172.     BRA.S    Delete3
  10173.  
  10174. DeleteSample
  10175.     LEA    DeleteSampleText,A0
  10176.     BSR    AreYouSure
  10177.     BNE    Return2
  10178.     LEA    DeletingSampleText(PC),A0
  10179.     BSR    ShowStatusText
  10180.     LEA    SamplePath2,A0
  10181.     BSR    CopyPath
  10182.     LEA    DirInputName,A0
  10183.     MOVEQ    #DirNameLength-1,D0
  10184. dsaloop    MOVE.B    (A0)+,(A1)+
  10185.     DBRA    D0,dsaloop
  10186.     MOVE.W    #5,Action
  10187.     BRA    Delete3
  10188.  
  10189. RenameFile
  10190.     LEA    RenamingFileText(PC),A0
  10191.     BSR    ShowStatusText
  10192.     LEA    DirInputName,A0
  10193.     LEA    NewInputName,A1
  10194.     MOVEQ    #23,D0
  10195. rnfloop    MOVE.B    (A0)+,(A1)+
  10196.     BNE.S    rnfskip
  10197.     SUBQ.L    #1,A0
  10198. rnfskip    DBRA    D0,rnfloop
  10199.     BSR    StorePtrCol
  10200.     BSR    SetWaitPtrCol
  10201.     LEA    NewInputName,A6
  10202.     MOVE.L    A6,ShowTextPtr
  10203.     MOVE.L    A6,TextEndPtr
  10204.     ADD.L    #23,TextEndPtr
  10205.     MOVE.W    #24,TextLength
  10206.     MOVE.W    FileNameScrollPos+2,D0
  10207.     MULU    #240,D0
  10208.     MOVE.W    #1888,A4
  10209.     ADD.W    D0,A4
  10210.     BSR    GetTextLine
  10211.     TST.B    NewInputName
  10212.     BEQ.S    rnfend
  10213.     CMP.B    #69,MixChar
  10214.     BEQ.S    rnfend
  10215.  
  10216.     MOVE.L    PathPtr,A0
  10217.     BSR    CopyPath
  10218.     LEA    NewInputName,A0
  10219.     MOVEQ    #23,D0
  10220. rnfloop2
  10221.     MOVE.B    (A0)+,(A1)+
  10222.     DBRA    D0,rnfloop2
  10223.  
  10224.     LEA    FileName,A0
  10225.     LEA    NewFileName,A1
  10226. rnfloop3
  10227.     MOVE.B    (A0)+,(A1)+
  10228.     BNE.S    rnfloop3
  10229.  
  10230.     MOVE.L    PathPtr,A0
  10231.     BSR    CopyPath
  10232.     LEA    DirInputName,A0
  10233.     MOVEQ    #DirNameLength-1,D0
  10234. rnfloop4
  10235.     MOVE.B    (A0)+,(A1)+
  10236.     DBRA    D0,rnfloop4
  10237.  
  10238.     MOVE.L    #FileName,D1
  10239.     MOVE.L    #NewFileName,D2
  10240.     MOVE.L    DOSbase(PC),A6
  10241.     JSR    LVORename(A6)
  10242.  
  10243. rnfend    BSR    ClearFileNames
  10244.     CLR.W    Action
  10245.     BSR    RestorePtrCol
  10246.     BRA    ShowAllRight
  10247.  
  10248. LoadSong
  10249.     MOVE.W    #1,LoadInProgress
  10250.     BSR    DoClearSong
  10251.     BSR    ClrSampleInfo
  10252.     LEA    SongsPath2,A0
  10253.     BSR    CopyPath
  10254.     LEA    DirInputName,A0
  10255.     MOVEQ    #DirNameLength-1,D0
  10256. losoloop2
  10257.     MOVE.B    (A0)+,(A1)+
  10258.     DBRA    D0,losoloop2
  10259.     MOVE.L    SongDataPtr(PC),DiskDataPtr
  10260.     MOVE.L    #FileName,FileNamePtr
  10261.     MOVE.L    #70716,DiskDataLength
  10262.     LEA    LoadingSongText(PC),A0
  10263.     BSR    ShowStatusText
  10264.     BSR    DoLoadData
  10265.     BEQ    lososkip3
  10266.     MOVE.L    SongDataPtr(PC),A0
  10267.     CMP.L    #'PACK',(A0)
  10268.     BNE.S    lososkip
  10269.     MOVE.L    4(A0),CrunchedSongLength
  10270.     MOVE.L    8(A0),RealSongLength
  10271.     MOVE.L    SongDataPtr(PC),D0
  10272.     ADD.L    #70716,D0
  10273.     SUB.L    RealSongLength(PC),D0
  10274.     MOVE.L    D0,EndOfSongPtr
  10275.     LEA    DecrunchingText(PC),A0
  10276.     BSR    ShowStatusText
  10277.     BSR    Decruncher
  10278.     BSR    ShowAllRight
  10279. lososkip
  10280.     MOVE.L    SongDataPtr(PC),A0
  10281.     CMP.L    #'M.K.',sd_mahokakt(A0)    ;  M.K. again...
  10282.     BEQ.S    lososkip2    
  10283.     BSR    MahoneyAndKaktus ; Was 16 instr, so move up...
  10284. lososkip2
  10285.     LEA    LoadingSongText(PC),A0
  10286.     BSR    ShowStatusText
  10287.     BSR    CheckAbort
  10288.     BEQ.S    lososkip3
  10289.     TST.B    AutoExitFlag
  10290.     BEQ.S    NoSongAutoExit
  10291.     BSR    ExitFromDir
  10292. NoSongAutoExit
  10293.     CLR.L    PatternNumber
  10294.     CLR.L    CurrPos
  10295.     BSR    RedrawPattern
  10296.     CLR.W    ScrPattPos
  10297.     BSR    SetScrPatternPos
  10298.     BSR    SortDisks
  10299.     LEA    SampleSortList(PC),A0
  10300.     MOVEQ    #30,D0
  10301. losoloop3
  10302.     TST.B    NosamplesFlag
  10303.     BNE.S    lososkip3
  10304.     BSR    CheckAbort
  10305.     BEQ.S    lososkip3
  10306.     MOVE.W    InsNum(PC),TuneUp
  10307.     BSR    DoShowFreeMem
  10308.     MOVE.L    (A0)+,D1
  10309.     MOVE.W    D1,InsNum
  10310.     MOVEM.L    D0/D1/A0,-(SP)
  10311.     BSR    LoadPreset
  10312.     BSR    ShowSampleInfo
  10313.     MOVEM.L    (SP)+,D0/D1/A0
  10314.     DBRA    D0,losoloop3
  10315. lososkip3
  10316.     MOVE.W    #1,InsNum
  10317.     MOVE.L    #6,CurrSpeed
  10318.     CLR.W    LoadInProgress
  10319.     BSR    ShowAllRight
  10320.     BSR    SetNormalPtrCol
  10321.     BSR    DoShowFreeMem
  10322.     BSR    CheckInstrLengths
  10323.     BSR    ShowSampleInfo
  10324.     BRA    RedrawSample
  10325.  
  10326. SortDisks
  10327.     MOVEM.L    D0-D4/A0-A1,-(SP)
  10328.     MOVE.L    SongDataPtr(PC),A0
  10329.     LEA    23(A0),A0
  10330.     LEA    SampleSortList(PC),A1
  10331.     MOVEQ    #1,D0
  10332. losoloop4
  10333.     MOVE.B    (A0)+,(A1)+    ; ST-(0)1
  10334.     MOVE.B    (A0),(A1)+    ; ST-0(1)
  10335.     MOVE.W    D0,(A1)+    ; insnum
  10336.     LEA    29(A0),A0
  10337.     ADDQ.L    #1,D0
  10338.     CMP.L    #32,D0
  10339.     BLO.S    losoloop4
  10340. losoloop5
  10341.     CLR.W    MoreInstrFlag
  10342.     LEA    SampleSortList(PC),A0
  10343.     MOVEQ    #29,D2
  10344. losoloop6
  10345.     MOVE.W    (A0),D0
  10346.     MOVE.W    4(A0),D1
  10347.     CMP.W    D0,D1 ; if next disk greater
  10348.     BHS.S    loso2_2
  10349.     MOVE.W    #1,MoreInstrFlag
  10350.     MOVE.L    (A0),D3 ; swap disks
  10351.     MOVE.L    4(A0),D4
  10352.     MOVE.L    D4,(A0)
  10353.     MOVE.L    D3,4(A0)
  10354. loso2_2    ADDQ.L    #4,A0
  10355.     DBRA    D2,losoloop6
  10356.     TST.W    MoreInstrFlag
  10357.     BNE.S    losoloop5
  10358.     LEA    SampleSortList(PC),A0
  10359.     MOVEQ    #30,D0
  10360. losoloop7
  10361.     CLR.W    (A0)
  10362.     ADDQ.L    #4,A0
  10363.     DBRA    D0,losoloop7
  10364.     MOVEM.L    (SP)+,D0-D4/A0-A1
  10365.     RTS
  10366.  
  10367. MahoneyAndKaktus
  10368.     LEA    Loadas31text(PC),A0
  10369.     BSR    AreYouSure
  10370.     BEQ.S    putmk
  10371.     MOVE.L    SongDataPtr(PC),A0    ; M.K. 32 samples format!
  10372.     LEA    466(A0),A1
  10373.     ADD.L    #66006,A0
  10374. makloop    MOVE.L    (A0),484(A0)
  10375.     CLR.L    (A0)
  10376.     SUBQ.L    #4,A0
  10377.     CMP.L    A0,A1
  10378.     BNE.S    makloop
  10379.     MOVE.L    SongDataPtr(PC),A0
  10380.     LEA    sd_mahokakt(A0),A1
  10381.     LEA    sd_numofpatt(A0),A0
  10382. makloop2
  10383.     MOVE.W    4(A0),(A0)+
  10384.     CMP.L    A0,A1
  10385.     BNE.S    makloop2
  10386.     MOVE.L    #'M.K.',(A0)    ; M.K. again!
  10387.     MOVEQ    #0,D0
  10388.     RTS
  10389.  
  10390. putmk    MOVE.L    SongDataPtr(PC),A0
  10391.     MOVE.L    #'M.K.',sd_mahokakt(A0)    ;  put M.K.
  10392.     MOVEQ    #-1,D0
  10393.     RTS
  10394.  
  10395. Loadas31Text    dc.b    "Load as 31 instr?",0
  10396.  
  10397. CheckInstrLengths
  10398.     MOVE.L    SongDataPtr(PC),A0
  10399.     ADD.L    #20,A0
  10400.     MOVEQ    #30,D1
  10401. xilloop    MOVE.W    26(A0),D0
  10402.     ADD.W    28(A0),D0
  10403.     CMP.W    22(A0),D0
  10404.     BLS.S    xilSkip
  10405.     MOVE.W    26(A0),D0
  10406.     LSR.W    #1,D0    
  10407.     MOVE.W    D0,26(A0)
  10408. xilskip    ADD.L    #30,A0
  10409.     DBRA    D1,xilloop
  10410.     RTS    
  10411.  
  10412. CheckAbort
  10413.     BTST    #2,$DFF016
  10414.     BNE    Return2
  10415.     MOVEM.L    D0-D7/A0-A6,-(SP)
  10416.     LEA    AbortLoadText,A0
  10417.     BSR    AreYouSure
  10418.     BNE.S    chabno
  10419.     MOVEM.L    (SP)+,D0-D7/A0-A6
  10420.     MOVEQ    #0,D7
  10421.     RTS
  10422.  
  10423. chabno    MOVEM.L    (SP)+,D0-D7/A0-A6
  10424.     MOVEQ    #-1,D7
  10425.     RTS
  10426.  
  10427. StopIt    BSR.S    DoStopIt
  10428. TurnOffVoices
  10429.     MOVEM.L    A0-A1,-(SP)
  10430.     MOVE.W    #$000F,$DFF096
  10431.     CLR.W    $DFF0A8
  10432.     CLR.W    $DFF0B8
  10433.     CLR.W    $DFF0C8
  10434.     CLR.W    $DFF0D8
  10435.     CLR.B    RawKeyCode
  10436.     LEA    ScopeInfo,A0
  10437.     LEA    BlankSample,A1
  10438.     MOVE.L    A1,(A0)
  10439.     MOVE.L    A1,20(A0)
  10440.     MOVE.L    A1,40(A0)
  10441.     MOVE.L    A1,60(A0)
  10442.     MOVEM.L    (SP)+,A0-A1
  10443.     RTS
  10444.  
  10445. DoStopIt
  10446.     BSR    SetNormalPtrCol
  10447.     CLR.L    EditMode
  10448.     CLR.L    RunMode
  10449.     CLR.B    PattDelayTime
  10450.     CLR.B    PattDelayTime2
  10451.     BRA    RestoreEffects2
  10452.  
  10453. UsePreset
  10454.     BSR    StorePtrCol
  10455.     TST.L    PLSTmem
  10456.     BEQ.S    upend
  10457.     TST.W    InsNum
  10458.     BEQ.S    upend
  10459.     CLR.B    RawKeyCode
  10460.     MOVE.W    CurrentPreset(PC),D0
  10461.     SUBQ.W    #1,D0
  10462.     MULU    #30,D0
  10463.     MOVE.L    PLSTmem(PC),A0
  10464.     ADD.L    D0,A0
  10465.     MOVE.W    InsNum(PC),D0
  10466.     MULU    #30,D0
  10467.     MOVE.L    SongDataPtr(PC),A1
  10468.     LEA    -10(A1,D0.W),A1
  10469.     MOVE.L    A1,A2
  10470.     MOVEQ    #29,D0
  10471. uploop    MOVE.B    (A0)+,(A1)+
  10472.     DBRA    D0,uploop
  10473.     MOVE.L    (A2),D0
  10474.     AND.L    #$DFDFFFFF,D0
  10475.     CMP.L    #$53540000,D0 ;ST__
  10476.     BNE.S    upok
  10477.     CLR.W    (A2)
  10478.     CLR.L    22(A2)
  10479.     MOVE.L    #$00000001,26(A2)
  10480. upok    BSR    LoadPreset
  10481. upend    BSR    ShowSampleInfo
  10482.     BRA    RestorePtrCol
  10483.  
  10484. ;---- Edit ----
  10485.  
  10486. Edit    TST.W    SamScrEnable
  10487.     BNE    Return2    
  10488.     BSR    StopIt
  10489.     CLR.B    RawKeyCode
  10490.     BSR    SetEditPtrCol
  10491.     BSR    SetScrPatternPos
  10492.     MOVE.L    #'edit',EditMode
  10493.     BRA    WaitForButtonUp
  10494.  
  10495. ;---- Edit Op. ----
  10496.  
  10497. DoEditOp
  10498.     CLR.B    RawKeyCode
  10499.     CMP.W    #1,CurrScreen
  10500.     BNE    Return2
  10501.     TST.B    EdEnable
  10502.     BEQ.S    EditOp
  10503.     ADDQ.B    #1,EdScreen
  10504.     CMP.B    #4,EdScreen
  10505.     BLO.S    EditOp
  10506.     MOVE.B    #1,EdScreen
  10507. EditOp    BSR    WaitForButtonUp
  10508.     ST    EdEnable
  10509.     ST    DisableAnalyzer
  10510.     JSR    ClearAnalyzerColors
  10511.     BSR    ClearRightArea
  10512.     BRA    DrawEditMenu
  10513.  
  10514. EdEnable    dc.b    0
  10515. EdScreen    dc.b    1
  10516.  
  10517. DrawEditMenu
  10518.     CMP.B    #1,EdScreen
  10519.     BNE.S    demskip
  10520.     MOVE.L    #EditOpText1,ShowTextPtr
  10521.     LEA    Edit1Data,A0
  10522.     MOVE.L    #Edit1Size,D0
  10523.     BRA.S    demit
  10524. demskip
  10525.     CMP.B    #2,EdScreen
  10526.     BNE.S    demskip2
  10527.     MOVE.L    #EditOpText2,ShowTextPtr
  10528.     LEA    Edit2Data,A0
  10529.     MOVE.L    #Edit2Size,D0
  10530.     BRA.S    demit
  10531. demskip2
  10532.     CMP.B    #3,EdScreen
  10533.     BNE    Return2
  10534.     MOVE.L    #EditOpText3,ShowTextPtr
  10535.     LEA    Edit3Data,A0
  10536.     MOVE.L    #Edit3Size,D0
  10537. demit    BSR    Decompact
  10538.     BEQ    ExitEditOp
  10539.     LEA    SpectrumAnaPos,A0
  10540.     MOVEQ    #54,D0
  10541. demloop1
  10542.     MOVEQ    #24,D1
  10543. demloop2
  10544.     MOVE.B    1430(A1),10240(A0)
  10545.     MOVE.B    (A1)+,(A0)+
  10546.     DBRA    D1,demloop2
  10547.     LEA    15(A0),A0
  10548.     ADDQ.L    #1,A1
  10549.     DBRA    D0,demloop1
  10550.     BSR    FreeDecompMem
  10551.     MOVE.W    #1936,TextOffset
  10552.     MOVE.W    #22,TextLength
  10553.     BSR    ShowText
  10554.     CMP.B    #1,EdScreen
  10555.     BEQ    ShowSampleAll
  10556.     CMP.B    #2,EdScreen
  10557.     BNE.S    demskip3
  10558.     BSR    ShowTrackPatt
  10559.     BSR    ShowFrom
  10560.     BSR    ShowTo
  10561.     BSR    ShowRecordMode
  10562.     BSR    ShowQuantize
  10563.     BSR    ShowMetronome
  10564.     BRA    ShowMultiMode
  10565. demskip3
  10566.     CMP.B    #3,EdScreen
  10567.     BNE    Return2
  10568.     BSR    ShowHalfClip
  10569.     BSR    ShowPos
  10570.     BSR    ShowMod
  10571.     BRA    ShowVol
  10572.  
  10573. EditOpText1    dc.b    '  track      pattern  '
  10574. EditOpText2    dc.b    '  record     samples  '
  10575. EditOpText3    dc.b    '    sample editor     '
  10576.  
  10577. CheckEditOpGadgs
  10578.     MOVE.W    PattCurPos(PC),D0
  10579.     BSR.S    GetPositionPtr
  10580.     MOVEM.W    MouseX2,D0/D1
  10581.     CMP.W    #306,D0
  10582.     BHS.S    CheckEdSwap
  10583.     CMP.B    #1,EdScreen
  10584.     BEQ    CheckEdGadg1
  10585.     CMP.B    #2,EdScreen
  10586.     BEQ    CheckEdGadg2
  10587.     CMP.B    #3,EdScreen
  10588.     BEQ    CheckEdGadg3
  10589.     RTS
  10590.  
  10591. GetPositionPtr
  10592.     MOVE.L    SongDataPtr(PC),A0
  10593.     LEA    sd_patterndata(A0),A0
  10594.     MOVE.L    PatternNumber(PC),D2
  10595.     LSL.L    #8,D2
  10596.     LSL.L    #2,D2
  10597.     ADD.L    D2,A0
  10598.     MOVEQ    #0,D2
  10599.     MOVE.W    D0,D2
  10600.     DIVU    #6,D2
  10601.     LSL.W    #2,D2
  10602.     ADD.W    D2,A0
  10603.     RTS
  10604.  
  10605. CheckEdSwap
  10606.     CMP.W    #55,D1
  10607.     BLS    Return2
  10608.     MOVEQ    #1,D2
  10609.     CMP.W    #66,D1
  10610.     BLS.S    SetEditOpScreen
  10611.     MOVEQ    #2,D2
  10612.     CMP.W    #77,D1
  10613.     BLS.S    SetEditOpScreen
  10614.     MOVEQ    #3,D2
  10615.     CMP.W    #88,D1
  10616.     BLS.S    SetEditOpScreen
  10617.     CMP.W    #99,D1
  10618.     BLS.S    ExitEditOp
  10619.     RTS
  10620.  
  10621. SetEditOpScreen
  10622.     MOVE.B    D2,EdScreen
  10623.     BRA    EditOp
  10624.  
  10625. ExitEditOp
  10626.     SF    EdEnable
  10627.     CLR.B    RawKeyCode
  10628.     BRA    DisplayMainScreen
  10629.  
  10630. CheckEdGadg1
  10631.     CMP.W    #55,D1
  10632.     BLS    ToggleSampleAll
  10633.     CMP.W    #66,D1
  10634.     BLS    NoteUp
  10635.     CMP.W    #77,D1
  10636.     BLS    NoteDown
  10637.     CMP.W    #88,D1
  10638.     BLS    OctaveUp
  10639.     CMP.W    #99,D1
  10640.     BLS    OctaveDown
  10641.     RTS
  10642.  
  10643. CheckEdGadg2
  10644.     CMP.W    #55,D1
  10645.     BLS    ToggleTrackPatt
  10646.     CMP.W    #213,D0
  10647.     BLS.S    ceg2left
  10648.     CMP.W    #66,D1
  10649.     BLS    DeleteOrKill
  10650.     CMP.W    #77,D1
  10651.     BLS    ExchangeOrCopy
  10652.     CMP.W    #88,D1
  10653.     BLS    SetSampleFrom
  10654.     CMP.W    #99,D1
  10655.     BLS    SetSampleTo
  10656.     RTS
  10657.  
  10658. ceg2left
  10659.     CMP.W    #66,D1
  10660.     BLS    ToggleRecordMode
  10661.     CMP.W    #77,D1
  10662.     BLS    SetQuantize
  10663.     CMP.W    #88,D1
  10664.     BLS    SetMetronome
  10665.     CMP.W    #99,D1
  10666.     BLS    ToggleMultiMode
  10667.     RTS
  10668.  
  10669. CheckEdGadg3
  10670.     MOVE.L    SongDataPtr(PC),A5
  10671.     LEA    -10(A5),A5
  10672.     MOVE.W    InsNum(PC),D2
  10673.     BNE.S    ceg3skip
  10674.     MOVE.W    LastInsNum,D2
  10675. ceg3skip
  10676.     MULU    #30,D2
  10677.     ADD.L    D2,A5
  10678.     CMP.W    #55,D1
  10679.     BLS    ToggleHalfClip
  10680.     CMP.W    #213,D0
  10681.     BLS.S    ceg3mid
  10682.     CMP.W    #66,D1
  10683.     BLS    SetSamplePos
  10684.     CMP.W    #77,D1
  10685.     BLS    SetModSpeed
  10686.     CMP.W    #88,D1
  10687.     BLS    CutBeg
  10688.     CMP.W    #99,D1
  10689.     BLS    ChangeVolume
  10690.     RTS
  10691.  
  10692. ceg3mid    CMP.W    #165,D0
  10693.     BLS.S    ceg3left
  10694.     CMP.W    #66,D1
  10695.     BLS    Echo
  10696.     CMP.W    #77,D1
  10697.     BLS    Filter
  10698.     CMP.W    #88,D1
  10699.     BLS    Backwards
  10700.     CMP.W    #99,D1
  10701.     BLS    DownSample
  10702.     RTS
  10703.  
  10704. ceg3left
  10705.     CMP.W    #66,D1
  10706.     BLS    Mix
  10707.     CMP.W    #77,D1
  10708.     BLS    Boost
  10709.     CMP.W    #88,D1
  10710.     BLS    XFade
  10711.     CMP.W    #99,D1
  10712.     BLS    UpSample
  10713.     RTS
  10714.  
  10715. ToggleSampleAll
  10716.     BSR    WaitForButtonUp
  10717.     EOR.B    #1,SampleAllFlag
  10718. ShowSampleAll
  10719.     LEA    BitplaneData+1838,A1
  10720.     LEA    S_BoxData,A2
  10721.     TST.B    SampleAllFlag
  10722.     BEQ    rtdoit
  10723.     LEA    A_BoxData,A2
  10724.     BRA    rtdoit
  10725.  
  10726. OctaveUp
  10727.     MOVE.W    #24,NoteShift
  10728.     BRA.S    nup2
  10729.  
  10730. NoteUp    MOVE.W    #2,NoteShift
  10731. nup2    BSR    SaveUndo
  10732.     CMP.W    #214,D0
  10733.     BLS.S    nup3
  10734.     MOVEQ    #0,D0
  10735.     BSR    GetPositionPtr
  10736.     BSR.S    SampleNoteUp
  10737.     MOVEQ    #6,D0
  10738.     BSR    GetPositionPtr
  10739.     BSR.S    SampleNoteUp
  10740.     MOVEQ    #12,D0
  10741.     BSR    GetPositionPtr
  10742.     BSR.S    SampleNoteUp
  10743.     MOVEQ    #18,D0
  10744.     BSR    GetPositionPtr
  10745. nup3    BSR.S    SampleNoteUp
  10746.     BRA    RedrawPattern
  10747.  
  10748. SampleNoteUp
  10749.     MOVEQ    #63,D6
  10750.     MOVE.L    A0,A3
  10751.     MOVE.W    InsNum(PC),D3
  10752.     TST.B    SampleAllFlag
  10753.     BEQ.S    sanulo2
  10754.     MOVEQ    #0,D3
  10755. sanulo2    MOVE.L    D6,D0
  10756.     MOVE.L    A3,A0
  10757. sanuloop
  10758.     MOVE.B    2(A0),D1
  10759.     LSR.B    #4,D1
  10760.     MOVE.B    (A0),D2
  10761.     AND.B    #$F0,D2
  10762.     OR.B    D2,D1
  10763.     CMP.B    D3,D1
  10764.     BNE.S    sanuskip
  10765.     MOVE.W    (A0),D1
  10766.     MOVE.W    D1,D2
  10767.     AND.W    #$F000,D2
  10768.     AND.W    #$0FFF,D1
  10769.     BEQ.S    sanuskip
  10770.     BSR    CheckPeriod
  10771.     BNE.S    sanuskip
  10772.     ADD.W    NoteShift(PC),D5
  10773.     CMP.W    #$0048,D5
  10774.     BLO.S    sanuok
  10775.     TST.B    TransDelFlag
  10776.     BEQ.S    sanuskip
  10777.     AND.L    #$00000FFF,(A0)
  10778.     BRA.S    sanuskip
  10779. sanuok    MOVE.W    0(A2,D5.W),D1
  10780.     OR.W    D2,D1
  10781.     MOVE.W    D1,(A0)
  10782. sanuskip
  10783.     LEA    16(A0),A0
  10784.     DBRA    D0,sanuloop
  10785.     TST.B    SampleAllFlag
  10786.     BEQ    Return2
  10787.     ADDQ.W    #1,D3
  10788.     CMP.W    #32,D3
  10789.     BLO.S    sanulo2
  10790.     RTS
  10791.  
  10792. OctaveDown
  10793.     MOVE.W    #24,NoteShift
  10794.     BRA.S    ndown2
  10795.  
  10796. NoteDown
  10797.     MOVE.W    #2,NoteShift
  10798. ndown2    BSR    SaveUndo
  10799.     CMP.W    #214,D0
  10800.     BLS.S    ndown3
  10801.     MOVEQ    #0,D0
  10802.     BSR    GetPositionPtr
  10803.     BSR.S    SampleNoteDown
  10804.     MOVEQ    #6,D0
  10805.     BSR    GetPositionPtr
  10806.     BSR.S    SampleNoteDown
  10807.     MOVEQ    #12,D0
  10808.     BSR    GetPositionPtr
  10809.     BSR.S    SampleNoteDown
  10810.     MOVEQ    #18,D0
  10811.     BSR    GetPositionPtr
  10812. ndown3    BSR.S    SampleNoteDown
  10813.     BRA    RedrawPattern
  10814.  
  10815. SampleNoteDown
  10816.     MOVEQ    #63,D6
  10817.     MOVE.L    A0,A3
  10818.     MOVE.W    InsNum(PC),D3
  10819.     TST.B    SampleAllFlag
  10820.     BEQ.S    sandlo2
  10821.     MOVEQ    #0,D3
  10822. sandlo2    MOVE.W    D6,D0
  10823.     MOVE.L    A3,A0
  10824. sandloop
  10825.     MOVE.B    2(A0),D1
  10826.     LSR.B    #4,D1
  10827.     MOVE.B    (A0),D2
  10828.     AND.B    #$F0,D2
  10829.     OR.B    D2,D1
  10830.     CMP.B    D1,D3
  10831.     BNE.S    sandskip
  10832.     MOVE.W    (A0),D1
  10833.     MOVE.W    D1,D2
  10834.     AND.W    #$F000,D2
  10835.     AND.W    #$0FFF,D1
  10836.     BEQ.S    sandskip
  10837.     BSR.S    CheckPeriod
  10838.     BNE.S    sandskip
  10839.     SUB.W    NoteShift(PC),D5
  10840.     BPL.S    sandok
  10841.     TST.B    TransDelFlag
  10842.     BEQ.S    sandskip
  10843.     AND.L    #$00000FFF,(A0)
  10844.     BRA.S    sandskip
  10845. sandok    MOVE.W    0(A2,D5.W),D1
  10846.     OR.W    D2,D1
  10847.     MOVE.W    D1,(A0)
  10848. sandskip
  10849.     LEA    16(A0),A0
  10850.     DBRA    D0,sandloop
  10851.     TST.B    SampleAllFlag
  10852.     BEQ    Return2
  10853.     ADDQ.W    #1,D3
  10854.     CMP.W    #$20,D3
  10855.     BLO.S    sandlo2
  10856.     RTS
  10857.  
  10858. NoteShift
  10859.     dc.w    0
  10860.  
  10861. CheckPeriod
  10862.     LEA    PeriodTable(PC),A2
  10863.     MOVEQ    #-2,D5
  10864. chpeloop
  10865.     ADDQ.L    #2,D5
  10866.     MOVE.W    0(A2,D5.W),D4
  10867.     BEQ.S    PeriodNotOk
  10868.     CMP.W    D4,D1
  10869.     BEQ.S    PeriodOk
  10870.     BRA.S    chpeloop
  10871.  
  10872. PeriodOk
  10873.     MOVEQ    #0,D4
  10874.     RTS
  10875.  
  10876. PeriodNotOk
  10877.     MOVEQ    #-1,D4
  10878.     RTS
  10879.  
  10880. ToggleTrackPatt
  10881.     BSR    WaitForButtonUp
  10882.     ADDQ.B    #1,TrackPattFlag
  10883.     CMP.B    #3,TrackPattFlag
  10884.     BLO.S    ShowTrackPatt
  10885.     CLR.B    TrackPattFlag
  10886. ShowTrackPatt
  10887.     LEA    BitplaneData+1838,A1
  10888.     LEA    T_BoxData,A2
  10889.     TST.B    TrackPattFlag
  10890.     BEQ    rtdoit
  10891.     LEA    P_BoxData,A2
  10892.     CMP.B    #1,TrackPattFlag
  10893.     BEQ    rtdoit
  10894.     LEA    S_BoxData,A2
  10895.     BRA    rtdoit
  10896.  
  10897. KillInstrTrack
  10898.     BSR    SaveUndo
  10899.     MOVE.W    PattCurPos(PC),D0
  10900.     BSR    GetPositionPtr
  10901.     BRA.S    dst2
  10902.  
  10903. DeleteOrKill
  10904.     CMP.W    #260,D0
  10905.     BHS    KillSample
  10906. DelSampleTrack
  10907.     BSR    SaveUndo
  10908.     TST.B    TrackPattFlag
  10909.     BEQ.S    dst2
  10910.     MOVEQ    #0,D0
  10911.     BSR    GetPositionPtr
  10912.     BSR.S    dstdoit
  10913.     MOVEQ    #6,D0
  10914.     BSR    GetPositionPtr
  10915.     BSR.S    dstdoit
  10916.     MOVEQ    #12,D0
  10917.     BSR    GetPositionPtr
  10918.     BSR.S    dstdoit
  10919.     MOVEQ    #18,D0
  10920.     BSR    GetPositionPtr
  10921. dst2    BSR.S    dstdoit
  10922.     BRA    RedrawPattern
  10923.  
  10924. dstdoit    CLR.B    RawKeyCode
  10925.     MOVEQ    #63,D0
  10926.     MOVE.W    InsNum(PC),D3
  10927.     BEQ    NotSampleNull
  10928. ksloop    MOVE.B    2(A0),D1
  10929.     LSR.B    #4,D1
  10930.     MOVE.B    (A0),D2
  10931.     AND.B    #$F0,D2
  10932.     OR.B    D2,D1
  10933.     CMP.B    D1,D3
  10934.     BNE.S    ksskip
  10935.     CLR.L    (A0)
  10936. ksskip    LEA    16(A0),A0
  10937.     DBRA    D0,ksloop
  10938.     RTS
  10939.  
  10940. KillSample
  10941.     LEA    KillSampleText,A0
  10942.     BSR    AreYouSure
  10943.     BNE    Return2
  10944. Destroy    BSR    StorePtrCol
  10945.     MOVE.W    InsNum(PC),D0
  10946.     BEQ    ErrorRestoreCol
  10947.     BSR    TurnOffVoices
  10948.     BSR    FreeSample
  10949.     MOVE.L    SongDataPtr(PC),A0
  10950.     MOVE.W    InsNum(PC),D0
  10951.     MULU    #30,D0
  10952.     LEA    -10(A0),A0
  10953.     ADD.L    D0,A0
  10954.     MOVE.L    A0,A1
  10955.     MOVEQ    #29,D0
  10956. kisalop    CLR.B    (A0)+
  10957.     DBRA    D0,kisalop
  10958.     MOVE.W    #1,28(A1)
  10959.     BSR    ShowSampleInfo
  10960.     BSR    RedrawSample
  10961.     BRA    RestorePtrCol
  10962.  
  10963. ExchangeOrCopy
  10964.     MOVEQ    #-1,D4
  10965.     CMP.W    #260,D0
  10966.     BHS.S    CopySampleTrack
  10967. ExchSampleTrack
  10968.     CMP.B    #2,TrackPattFlag
  10969.     BEQ    ExchSamples
  10970.     MOVEQ    #0,D4
  10971.     BRA.S    mstskip
  10972. CopySampleTrack
  10973.     CMP.B    #2,TrackPattFlag
  10974.     BEQ    CopySamples
  10975. mstskip    TST.B    TrackPattFlag
  10976.     BEQ.S    mst2
  10977.     MOVEQ    #0,D0
  10978.     BSR    GetPositionPtr
  10979.     BSR.S    mstdoit
  10980.     MOVEQ    #6,D0
  10981.     BSR    GetPositionPtr
  10982.     BSR.S    mstdoit
  10983.     MOVEQ    #12,D0
  10984.     BSR    GetPositionPtr
  10985.     BSR.S    mstdoit
  10986.     MOVEQ    #18,D0
  10987.     BSR    GetPositionPtr
  10988. mst2    BSR.S    mstdoit
  10989.     BRA    RedrawPattern
  10990.  
  10991. mstdoit    MOVEQ    #63,D0
  10992. esloop    MOVE.B    2(A0),D1
  10993.     LSR.B    #4,D1
  10994.     MOVE.B    (A0),D2
  10995.     AND.B    #$F0,D2
  10996.     OR.B    D2,D1
  10997.     CMP.B    SampleFrom(PC),D1
  10998.     BNE.S    esskip2
  10999.     AND.L    #$0FFF0FFF,(A0)
  11000.     MOVE.B    SampleTo(PC),D2
  11001.     MOVE.B    D2,D3
  11002.     AND.B    #$F0,D2
  11003.     OR.B    D2,(A0)
  11004.     LSL.B    #4,D3
  11005.     OR.B    D3,2(A0)
  11006.     BRA.S    esskip3
  11007. esskip2    TST.B    D4
  11008.     BNE.S    esskip3
  11009.     CMP.B    SampleTo(PC),D1
  11010.     BNE.S    esskip3
  11011.     AND.L    #$0FFF0FFF,(A0)
  11012.     MOVE.B    SampleFrom(PC),D2
  11013.     MOVE.B    D2,D3
  11014.     AND.B    #$F0,D2
  11015.     OR.B    D2,(A0)
  11016.     LSL.B    #4,D3
  11017.     OR.B    D3,2(A0)
  11018. esskip3    LEA    16(A0),A0
  11019.     DBRA    D0,esloop
  11020.     RTS
  11021.  
  11022. ExchSamples
  11023.     BSR    StorePtrCol
  11024.     MOVEQ    #0,D0
  11025.     MOVE.B    SampleFrom(PC),D0
  11026.     BEQ    ErrorRestoreCol
  11027.     MOVEQ    #0,D1
  11028.     MOVE.B    SampleTo(PC),D1
  11029.     BEQ    ErrorRestoreCol
  11030.     MOVE.W    D0,D2
  11031.     MOVE.W    D1,D3
  11032.     LEA    SampleLengthAdd+2,A2
  11033.     LSL.W    #1,D2
  11034.     LSL.W    #1,D3
  11035.     LEA    (A2,D2.W),A0
  11036.     LEA    (A2,D3.W),A1
  11037.     MOVE.W    (A0),D4
  11038.     MOVE.W    (A1),(A0)
  11039.     MOVE.W    D4,(A1)
  11040.     LEA    SamplePtrs,A2
  11041.     LSL.W    #1,D2
  11042.     LSL.W    #1,D3
  11043.     LEA    (A2,D2.W),A0
  11044.     LEA    (A2,D3.W),A1
  11045.     MOVE.L    (A0),D4
  11046.     MOVE.L    (A1),(A0)
  11047.     MOVE.L    D4,(A1)
  11048.     MOVE.L    124(A0),D4
  11049.     MOVE.L    124(A1),124(A0)
  11050.     MOVE.L    D4,124(A1)
  11051.     SUBQ.W    #1,D0
  11052.     SUBQ.W    #1,D1
  11053.     MULU    #30,D0
  11054.     MULU    #30,D1
  11055.     MOVE.L    SongDataPtr(PC),A2
  11056.     LEA    20(A2),A2
  11057.     LEA    (A2,D0.W),A0
  11058.     LEA    (A2,D1.W),A1
  11059.     MOVEQ    #29,D0
  11060. exsalop    MOVE.B    (A0),D1
  11061.     MOVE.B    (A1),(A0)+
  11062.     MOVE.B    D1,(A1)+
  11063.     DBRA    D0,exsalop
  11064.     BSR    ShowSampleInfo
  11065.     BSR    RedrawSample
  11066.     BRA    RestorePtrCol
  11067.  
  11068. CopySamples
  11069.     BSR    StorePtrCol
  11070.     MOVEQ    #0,D0
  11071.     MOVE.B    SampleFrom(PC),D0
  11072.     BEQ    ErrorRestoreCol
  11073.     MOVEQ    #0,D1
  11074.     MOVE.B    SampleTo(PC),D1
  11075.     BEQ    ErrorRestoreCol
  11076.     LEA    SamplePtrs(PC),A2
  11077.     LSL.W    #2,D0
  11078.     LSL.W    #2,D1
  11079.     LEA    (A2,D0.W),A3
  11080.     LEA    (A2,D1.W),A4
  11081.     MOVE.L    (A3),D0
  11082.     BEQ    ErrorRestoreCol
  11083.     MOVE.L    124(A3),D0
  11084.     MOVEQ    #MEMF_CHIP,D1
  11085.     MOVE.L    4.W,A6
  11086.     JSR    LVOAllocMem(A6)
  11087.     TST.L    D0
  11088.     BEQ    OutOfMemErr
  11089.     MOVE.L    D0,A5
  11090.     MOVEQ    #0,D0
  11091.     MOVE.B    SampleTo(PC),D0
  11092.     MOVE.W    D0,InsNum
  11093.     BSR    Destroy
  11094.     MOVE.L    A5,(A4)
  11095.     MOVE.L    124(A3),D0
  11096.     MOVE.L    D0,124(A4)
  11097.     MOVE.L    (A3),A0
  11098. cosalp2    MOVE.B    (A0)+,(A5)+
  11099.     SUBQ.L    #1,D0
  11100.     BNE.S    cosalp2
  11101.     MOVEQ    #0,D0
  11102.     MOVEQ    #0,D1
  11103.     MOVE.B    SampleFrom(PC),D0
  11104.     MOVE.B    SampleTo(PC),D1
  11105.     MOVE.W    D1,InsNum
  11106.     MULU    #30,D0
  11107.     MULU    #30,D1
  11108.     MOVE.L    SongDataPtr(PC),A2
  11109.     LEA    -10(A2),A2
  11110.     LEA    (A2,D0.W),A0
  11111.     LEA    (A2,D1.W),A1
  11112.     MOVEQ    #29,D0
  11113. cosalop    MOVE.B    (A0)+,(A1)+
  11114.     DBRA    D0,cosalop
  11115.     BSR    ShowSampleInfo
  11116.     BSR    RedrawSample
  11117.     BRA    RestorePtrCol
  11118.  
  11119. SetSampleFrom
  11120.     MOVE.W    InsNum(PC),D2
  11121.     CMP.W    #283,D0
  11122.     BLS.S    sesfskip
  11123.     MOVE.B    SampleFrom(PC),D2
  11124.     CMP.W    #295,D0
  11125.     BLS.S    sesfup
  11126.     SUBQ.B    #1,D2
  11127.     BPL.S    sesfskip
  11128.     MOVEQ    #0,D2
  11129. sesfskip
  11130.     MOVE.B    D2,SampleFrom
  11131.     BSR    Wait_4000
  11132.     BRA.S    ShowFrom
  11133. sesfup    ADDQ.B    #1,D2
  11134.     CMP.B    #$1F,D2
  11135.     BLS.S    sesfskip
  11136.     MOVE.B    #$1F,SampleFrom
  11137. ShowFrom
  11138.     MOVE.W    #3273,TextOffset
  11139.     CLR.W    WordNumber
  11140.     MOVE.B    SampleFrom(PC),WordNumber+1
  11141.     BRA    PrintHexByte
  11142.  
  11143. SetSampleTo
  11144.     MOVE.W    InsNum(PC),D2
  11145.     CMP.W    #283,D0
  11146.     BLS.S    sestskip
  11147.     MOVE.B    SampleTo(PC),D2
  11148.     CMP.W    #295,D0
  11149.     BLS.S    sestup
  11150.     SUBQ.B    #1,D2
  11151.     BPL.S    sestskip
  11152.     MOVEQ    #0,D2
  11153. sestskip
  11154.     MOVE.B    D2,SampleTo
  11155.     BSR    Wait_4000
  11156.     BRA.S    ShowTo
  11157. sestup    ADDQ.B    #1,D2
  11158.     CMP.B    #$1F,D2
  11159.     BLS.S    sestskip
  11160.     MOVE.B    #$1F,SampleTo
  11161. ShowTo    MOVE.W    #3713,TextOffset
  11162.     CLR.W    WordNumber
  11163.     MOVE.B    SampleTo(PC),WordNumber+1
  11164.     BRA    PrintHexByte
  11165.  
  11166. SampleFrom    dc.b 0
  11167. SampleTo    dc.b 0
  11168.  
  11169. ToggleRecordMode
  11170.     BSR    WaitForButtonUp
  11171.     EOR.B    #1,RecordMode
  11172. ShowRecordMode
  11173.     MOVE.W    #2382,D1
  11174.     LEA    PattText,A0
  11175.     TST.B    RecordMode
  11176.     BEQ.S    srmskip
  11177.     LEA    SongText,A0
  11178. srmskip    MOVEQ    #4,D0
  11179.     BRA    ShowText3
  11180.  
  11181. PattText    dc.b 'patt'
  11182. SongText    dc.b 'song'
  11183. RecordMode    dc.b 0
  11184. QuantizeValue    dc.b 1
  11185. MetroSpeed    dc.b 4
  11186. MetroChannel    dc.b 0
  11187. MultiFlag    dc.b 0
  11188. SampleAllFlag    dc.b 0
  11189. TrackPattFlag    dc.b 0
  11190. ClipHalveFlag    dc.b 0
  11191. AbortDecFlag    dc.w 0
  11192.  
  11193. GetDecByte
  11194.     MOVE.W    #1,AbortDecFlag
  11195.     BSR    StorePtrCol
  11196.     BSR    SetWaitPtrCol
  11197.     BSR    UpdateLineCurPos
  11198.     BSR    GetKey0_9
  11199.     CMP.B    #68,D1
  11200.     BEQ.S    gdbexit
  11201.     MOVE.B    D1,D0
  11202.     MULU    #10,D0
  11203.     MOVE.B    D0,GetDecTemp
  11204.     BSR    ShowOneDigit
  11205.     ADDQ.W    #8,LineCurX
  11206.     BSR    UpdateLineCurPos
  11207.     BSR    GetKey0_9
  11208.     CMP.B    #68,D1
  11209.     BEQ.S    gdbexit
  11210.     ADD.B    D1,GetDecTemp
  11211.     CLR.W    AbortDecFlag
  11212. gdbexit    CLR.W    LineCurX
  11213.     MOVE.W    #270,LineCurY
  11214.     BSR    UpdateLineCurPos
  11215.     BSR    RestorePtrCol
  11216.     MOVE.B    GetDecTemp,D0
  11217.     RTS
  11218.  
  11219. SetQuantize
  11220.     CLR.B    RawKeyCode
  11221.     MOVE.W    #196,LineCurX
  11222.     MOVE.W    #76,LineCurY
  11223.     MOVE.W    #2824,TextOffset
  11224.     BSR    GetDecByte
  11225.     TST.W    AbortDecFlag
  11226.     BNE    ShowQuantize
  11227.     CMP.B    #63,D0
  11228.     BLS.S    tqskip
  11229.     MOVEQ.B    #63,D0
  11230. tqskip    MOVE.B    D0,QuantizeValue
  11231. ShowQuantize
  11232.     MOVE.W    #2824,TextOffset
  11233.     CLR.W    WordNumber
  11234.     MOVE.B    QuantizeValue,WordNumber+1
  11235.     BRA    Print2DecDigits
  11236.  
  11237. SetMetronome
  11238.     CLR.B    RawKeyCode
  11239.     CMP.W    #188,D0
  11240.     BHS.S    smchan
  11241.     MOVE.W    #3261,TextOffset
  11242.     MOVE.W    #172,LineCurX
  11243.     MOVE.W    #87,LineCurY
  11244.     BSR    GetDecByte
  11245.     TST.W    AbortDecFlag
  11246.     BNE    ShowMetronome
  11247.     CMP.B    #64,D0
  11248.     BLS.S    smexit
  11249.     MOVEQ.B    #64,D0
  11250. smexit    MOVE.B    D0,MetroSpeed
  11251.     BRA.S    ShowMetronome
  11252.  
  11253. smchan    MOVE.W    #3264,TextOffset
  11254.     BSR    GetHexByte
  11255.     CMP.W    #4,D0
  11256.     BLS.S    smexit2
  11257.     MOVEQ    #4,D0
  11258. smexit2    MOVE.B    D0,MetroChannel
  11259. ShowMetronome
  11260.     MOVE.W    #3261,TextOffset
  11261.     CLR.W    WordNumber
  11262.     MOVE.B    MetroSpeed,WordNumber+1
  11263.     BSR    Print2DecDigits
  11264.     MOVE.W    #3264,TextOffset
  11265.     CLR.W    WordNumber
  11266.     MOVE.B    MetroChannel,WordNumber+1
  11267.     BRA    Print2DecDigits
  11268.  
  11269. ToggleMultiMode
  11270.     BSR    WaitForButtonUp
  11271.     CLR.B    RawKeyCode
  11272.     EOR.B    #1,MultiFlag
  11273. ShowMultiMode
  11274.     BSR.S    Show_MS
  11275.     CMP.W    #1,CurrScreen
  11276.     BNE    Return2
  11277.     CMP.B    #2,EdScreen
  11278.     BNE    Return2
  11279.     TST.B    EdEnable
  11280.     BEQ    Return2
  11281.     MOVE.W    #3700,D1
  11282.     LEA    SingleText(PC),A0
  11283.     TST.B    MultiFlag
  11284.     BEQ.S    smmskip
  11285.     LEA    MultiText(PC),A0
  11286. smmskip    MOVEQ    #6,D0
  11287.     BRA    ShowText3
  11288.  
  11289. SingleText    dc.b 'single'
  11290. MultiText    dc.b ' multi'
  11291.  
  11292. Show_MS    CMP.W    #4,CurrScreen
  11293.     BEQ    Return2
  11294.     MOVE.B    #' ',D0
  11295.     TST.B    MultiFlag
  11296.     BEQ.S    smsskp1
  11297.     MOVE.B    #'M',D0
  11298. smsskp1    MOVE.B    #' ',D1
  11299.     TST.B    SplitFlag
  11300.     BEQ.S    smsskp2
  11301.     MOVE.B    #'S',D1
  11302. smsskp2    MOVE.B    D0,mstext
  11303.     MOVE.B    D1,mstext+1
  11304.     MOVE.W    #4121,D1
  11305.     MOVEQ    #2,D0
  11306.     LEA    mstext(PC),A0
  11307.     BSR    ShowText3
  11308.     BRA    ShowAutoInsert
  11309.  
  11310. mstext    dc.b '__'
  11311.  
  11312. ;---- Edit Op. 3 ----
  11313.  
  11314. ToggleHalfClip
  11315.     BSR    WaitForButtonUp
  11316.     EOR.B    #1,HalfClipFlag
  11317. ShowHalfClip
  11318.     LEA    BitplaneData+1838,A1
  11319.     LEA    H_BoxData,A2
  11320.     TST.B    HalfClipFlag
  11321.     BEQ.S    ogaoga
  11322.     LEA    C_BoxData,A2
  11323. ogaoga    JMP    rtdoit
  11324.  
  11325. SetSamplePos
  11326.     MOVE.L    SamplePos(PC),D2
  11327.     CMP.W    #283,D0
  11328.     BLS    Return2
  11329.     CMP.W    #295,D0
  11330.     BLS.S    shpoup
  11331.     SUBQ.L    #1,D2
  11332.     BTST    #2,$DFF016
  11333.     BNE.S    shposkip
  11334.     SUB.L    #15,D2
  11335. shposkip
  11336.     BPL.S    shposkip2
  11337.     MOVEQ    #0,D2
  11338. shposkip2
  11339.     MOVE.L    D2,SamplePos
  11340.     BRA.S    ShowPos
  11341. shpoup    ADDQ.L    #1,D2
  11342.     BTST    #2,$DFF016
  11343.     BNE.S    shposkip3
  11344.     ADD.L    #15,D2
  11345. shposkip3
  11346.     MOVEQ    #0,D3
  11347.     MOVE.W    22(A5),D3
  11348.     LSL.L    #1,D3
  11349.     CMP.L    D3,D2
  11350.     BLS.S    shposkip2
  11351.     MOVE.L    D3,SamplePos
  11352. ShowPos    CMP.W    #1,CurrScreen
  11353.     BNE    Return2
  11354.     TST.B    EdEnable
  11355.     BEQ    Return2
  11356.     CMP.B    #3,EdScreen
  11357.     BNE    Return2
  11358.     MOVE.W    #2391,TextOffset
  11359.     MOVE.W    SamplePos+2(PC),WordNumber
  11360.     BRA    PrintHexWord
  11361.  
  11362. SetModSpeed
  11363.     CMP.W    #243,D0
  11364.     BLS    DoMod
  11365.     MOVEQ    #0,D2
  11366.     BTST    #2,$DFF016
  11367.     BEQ.S    semoskp
  11368.     MOVE.B    ModSpeed,D2
  11369.     CMP.W    #283,D0
  11370.     BLS    Return2
  11371.     CMP.W    #295,D0
  11372.     BLS.S    semoup
  11373.     SUB.B    #1,D2
  11374.     CMP.B    #127,D2
  11375.     BNE.S    semoskp
  11376.     MOVE.B    #128,D2
  11377.     BRA.S    semoskp
  11378. semoup    ADD.B    #1,D2
  11379.     CMP.B    #128,D2
  11380.     BNE.S    semoskp
  11381.     MOVEQ    #127,D2
  11382. semoskp    MOVE.B    D2,ModSpeed
  11383.     BSR    Wait_4000
  11384. ShowMod    LEA    PlusMinusText(PC),A0
  11385.     MOVEQ    #0,D6
  11386.     MOVE.B    ModSpeed,D6
  11387.     BPL.S    shmoskp
  11388.     NEG.B    D6
  11389.     ADDQ.L    #1,A0
  11390. shmoskp    MOVEQ    #1,D0
  11391.     MOVE.W    #2831,D1
  11392.     BSR    ShowText3
  11393.     MOVE.W    D6,WordNumber
  11394.     BRA    Print3DecDigits
  11395.  
  11396. PlusMinusText    dc.b ' -'
  11397.  
  11398. DoMod    BSR    WaitForButtonUp
  11399.     BSR    StorePtrCol
  11400.     BSR    SetWaitPtrCol
  11401.     MOVEQ    #0,D2
  11402.     MOVE.W    SampleInfo(PC),D2
  11403.     BEQ    ErrorRestoreCol
  11404.     LSL.W    #1,D2
  11405.     SUBQ.W    #1,D2
  11406.     MOVE.L    si_pointer,D0
  11407.     BEQ    ErrorRestoreCol
  11408.     BSR    AllocBuffer
  11409.     MOVE.L    D0,A2
  11410.     MOVE.L    D0,A3
  11411.     MOVE.L    A1,A4
  11412.     ADD.L    D2,A3
  11413.     CLR.L    ModOffset
  11414.     CLR.L    ModPos
  11415. dmoloop    CMP.L    A3,A2
  11416.     BHS.S    dmoskip
  11417.     MOVE.B    (A1),(A2)+
  11418.     BSR.S    UpdateMod
  11419.     BRA.S    dmoloop
  11420. dmoskip    MOVE.L    si_pointer(PC),A1
  11421.     CLR.W    (A1)
  11422.     BSR    FreeBuffer
  11423.     BSR    RestorePtrCol
  11424.     BRA    DisplaySample
  11425.  
  11426. UpdateMod
  11427.     MOVE.B    ModSpeed(PC),D0
  11428.     BEQ.S    upmplus
  11429.     EXT.W    D0
  11430.     EXT.L    D0
  11431.     MOVE.L    ModPos(PC),D1
  11432.     ADD.L    D0,D1
  11433.     MOVE.L    D1,ModPos
  11434.     ASR.L    #8,D1
  11435.     ASR.L    #4,D1
  11436.     MOVE.L    D1,D3
  11437.     AND.W    #$1F,D1    
  11438.     LEA    VibratoTable,A0
  11439.     MOVEQ    #0,D0
  11440.     MOVE.B    (A0,D1.W),D0
  11441.     LSR.B    #2,D0
  11442.     MOVE.L    ModOffset(PC),D1
  11443.     BTST    #5,D3
  11444.     BEQ.S    upmskip
  11445.     SUB.L    D0,D1
  11446.     BRA.S    upmskp2
  11447. upmskip    ADD.L    D0,D1
  11448. upmskp2    ADD.L    #$800,D1
  11449.     MOVE.L    D1,ModOffset
  11450.     ASR.L    #8,D1
  11451.     ASR.L    #3,D1
  11452.     BPL.S    upmskp3
  11453.     MOVEQ    #0,D1
  11454. upmskp3    CMP.L    D2,D1
  11455.     BLO.S    upmskp4
  11456.     MOVE.L    D2,D1
  11457. upmskp4    MOVE.L    A4,A1
  11458.     ADD.L    D1,A1
  11459.     RTS
  11460. upmplus    ADDQ.L    #1,A1
  11461.     RTS
  11462.  
  11463. CutBeg    CMP.W    #283,D0
  11464.     BHI    FadeDown
  11465.     CMP.W    #259,D0
  11466.     BHI    FadeUp
  11467.     BSR    WaitForButtonUp
  11468.     BSR    StorePtrCol
  11469.     BSR    SetWaitPtrCol
  11470.     MOVEQ    #0,D3
  11471.     MOVE.W    SampleInfo(PC),D3
  11472.     BEQ    ErrorRestoreCol
  11473.     LSL.W    #1,D3
  11474.     SUBQ.W    #1,D3
  11475.     MOVE.L    si_pointer,D0
  11476.     BEQ    ErrorRestoreCol
  11477.     MOVE.L    D0,A1
  11478.     MOVE.L    D0,A2
  11479.     MOVE.L    D0,A3
  11480.     ADD.L    SamplePos(PC),A2
  11481.     ADD.L    D3,A3
  11482. cbeloop    CMP.L    A3,A2
  11483.     BHS.S    cbeskip
  11484.     MOVE.B    (A2),D0
  11485.     CLR.B    (A2)+
  11486.     MOVE.B    D0,(A1)+
  11487.     BRA.S    cbeloop    
  11488. cbeskip    MOVE.L    si_pointer(PC),A2
  11489.     CLR.W    (A2)
  11490.     SUB.L    A2,A1
  11491.     MOVE.L    A1,D0
  11492.     LSR.L    #1,D0
  11493.     ADDQ.L    #1,D0
  11494.     AND.W    #$7FFF,D0
  11495.     MOVE.W    D0,22(A5)
  11496.     BSR    ShowSampleInfo
  11497.     BSR    RestorePtrCol
  11498.     BRA    DisplaySample
  11499.  
  11500. FadeUp    BSR    WaitForButtonUp
  11501.     BSR    StorePtrCol
  11502.     BSR    SetWaitPtrCol
  11503.     MOVEQ    #0,D3
  11504.     MOVE.W    SampleInfo(PC),D3
  11505.     BEQ    ErrorRestoreCol
  11506.     MOVEQ    #0,D1
  11507.     MOVE.L    SamplePos(PC),D2
  11508.     BEQ    ErrorRestoreCol
  11509.     MOVE.L    si_pointer,D0
  11510.     BEQ    ErrorRestoreCol
  11511.     MOVE.L    D0,A0
  11512.     LSR.W    #1,D2
  11513.     BEQ    ErrorRestoreCol
  11514.     MOVEQ    #0,D4
  11515. fuloop    MOVE.B    (A0),D0
  11516.     EXT.W    D0
  11517.     MULS    D1,D0
  11518.     DIVS    D2,D0
  11519.     MOVE.B    D0,(A0)+
  11520.     ADDQ.W    #1,D4
  11521.     MOVE.W    D4,D1
  11522.     LSR.W    #1,D1
  11523.     CMP.W    D2,D1
  11524.     BLO.S    fuloop
  11525.     BSR    RestorePtrCol
  11526.     BRA    DisplaySample
  11527.  
  11528. FadeDown
  11529.     BSR    WaitForButtonUp
  11530.     BSR    StorePtrCol
  11531.     BSR    SetWaitPtrCol
  11532.     MOVEQ    #0,D3
  11533.     MOVE.W    SampleInfo(PC),D3
  11534.     BEQ    ErrorRestoreCol
  11535.     LSL.L    #1,D3
  11536.     SUBQ.L    #1,D3 ;Length-1
  11537.     MOVE.L    SamplePos(PC),D2
  11538.     CMP.L    D3,D2
  11539.     BHS    ErrorRestoreCol
  11540.     MOVE.L    D3,D4 ; Copy length to D4
  11541.     SUB.L    D2,D3 ; Length-pos
  11542.     MOVE.L    D3,D2 ; Copy offset to D2
  11543.     MOVE.L    si_pointer,D0
  11544.     BEQ    ErrorRestoreCol
  11545.     MOVE.L    D0,A0
  11546.     LEA    (A0,D4.L),A0 ;Start at end of sample
  11547.     LSR.W    #1,D2
  11548.     BEQ    ErrorRestoreCol
  11549.     MOVEQ    #0,D1
  11550.     MOVEQ    #0,D4
  11551. fdloop    MOVE.B    (A0),D0
  11552.     EXT.W    D0
  11553.     MULS    D1,D0
  11554.     DIVS    D2,D0
  11555.     MOVE.B    D0,(A0)
  11556.     SUBQ.L    #1,A0
  11557.     ADDQ.W    #1,D4
  11558.     MOVE.W    D4,D1
  11559.     LSR.W    #1,D1
  11560.     CMP.W    D2,D1
  11561.     BLO.S    fdloop
  11562.     BSR    RestorePtrCol
  11563.     BRA    DisplaySample
  11564.  
  11565. ChangeVolume
  11566.     MOVE.W    SampleVol(PC),D2
  11567.     CMP.W    #243,D0
  11568.     BLS    DoChangeVol
  11569.     CMP.W    #283,D0
  11570.     BLS    Return2
  11571.     CMP.W    #295,D0
  11572.     BLS    shvoup
  11573.     SUBQ.W    #1,D2
  11574.     BTST    #2,$DFF016
  11575.     BNE.S    shvoskip
  11576.     SUB.W    #9,D2
  11577. shvoskip
  11578.     BPL.S    shvoskip2
  11579.     MOVEQ    #0,D2
  11580. shvoskip2
  11581.     MOVE.W    D2,SampleVol
  11582.     BSR    Wait_4000
  11583.     BRA.S    ShowVol
  11584. shvoup    ADDQ.L    #1,D2
  11585.     BTST    #2,$DFF016
  11586.     BNE.S    shvoskip3
  11587.     ADD.W    #9,D2
  11588. shvoskip3
  11589.     CMP.W    #999,D2
  11590.     BLS.S    shvoskip2
  11591.     MOVE.W    #999,SampleVol
  11592.     BSR    Wait_4000
  11593. ShowVol    MOVE.W    #3711,TextOffset
  11594.     MOVE.W    SampleVol(PC),WordNumber
  11595.     BSR    Print3DecDigits
  11596.     LEA    PercentText(PC),A0
  11597.     MOVE.W    #1,TextLength
  11598.     BRA    ShowText2
  11599.  
  11600. PercentText    dc.b '%',0
  11601.  
  11602. DoChangeVol
  11603.     BSR    WaitForButtonUp
  11604.     BSR    StorePtrCol
  11605.     BSR    SetWaitPtrCol
  11606.     MOVEQ    #0,D3
  11607.     MOVE.W    SampleInfo(PC),D3
  11608.     BEQ    ErrorRestoreCol
  11609.     LSL.W    #1,D3
  11610.     SUBQ.W    #1,D3
  11611.     MOVE.L    si_pointer,D0
  11612.     BEQ    ErrorRestoreCol
  11613.     MOVE.L    D0,A1
  11614.     MOVE.W    SampleVol(PC),D0
  11615. dcvloop    MOVE.B    (A1),D1
  11616.     EXT.W    D1
  11617.     MULS    D0,D1
  11618.     DIVS    #100,D1
  11619.     CMP.W    #127,D1
  11620.     BLE.S    dcvskip
  11621.     MOVEQ    #127,D1
  11622. dcvskip    CMP.W    #-128,D1
  11623.     BGE.S    dcvskp2
  11624.     MOVEQ    #-128,D1
  11625. dcvskp2    MOVE.B    D1,(A1)+
  11626.     DBRA    D3,dcvloop
  11627.     MOVE.L    si_pointer(PC),A1
  11628.     CLR.W    (A1)
  11629.     BSR    RestorePtrCol
  11630.     BRA    DisplaySample
  11631.  
  11632. Mix    BTST    #2,$DFF016
  11633.     BEQ    OldMix
  11634.     BSR    WaitForButtonUp
  11635.     BSR    StorePtrCol
  11636.     BSR    SetWaitPtrCol
  11637.     MOVE.W    #1,GetLineFlag
  11638.     MOVE.W    #4,MixCurPos
  11639. mixlopx    BSR    DisplayMix
  11640.     BSR    GetHexKey
  11641.     TST.B    D0
  11642.     BNE.S    mixnzro
  11643.     CMP.B    #68,MixChar
  11644.     BEQ    Mix2
  11645.     CMP.B    #69,MixChar
  11646.     BEQ    EndMix
  11647.     BTST    #2,$DFF016
  11648.     BEQ    EndMix
  11649. mixpchr    LEA    MixText(PC),A0
  11650.     LEA    FastHexTable+1,A1
  11651.     LSL.W    #1,D1
  11652.     MOVE.W    MixCurPos(PC),D0
  11653.     MOVE.B    (A1,D1.W),(A0,D0.W)
  11654. MixMoveRight
  11655.     MOVE.W    MixCurPos,D0
  11656.     ADDQ.W    #1,D0
  11657.     CMP.W    #6,D0
  11658.     BEQ.S    mmrp1
  11659.     CMP.W    #9,D0
  11660.     BEQ.S    mmrp2
  11661.     CMP.W    #15,D0
  11662.     BHS.S    mmrp3
  11663. mmrok    MOVE.W    D0,MixCurPos
  11664.     BRA    mixlopx
  11665. mmrp1    MOVEQ    #7,D0
  11666.     BRA.S    mmrok
  11667. mmrp2    MOVEQ    #13,D0
  11668.     BRA.S    mmrok
  11669. mmrp3    MOVEQ    #14,D0
  11670.     BRA.S    mmrok
  11671.  
  11672. mixnzro    CMP.B    #1,D0
  11673.     BEQ.S    MixMoveRight
  11674. MixMoveLeft
  11675.     MOVE.W    MixCurPos,D0
  11676.     SUBQ.W    #1,D0
  11677.     CMP.W    #4,D0
  11678.     BLO.S    mmlp1
  11679.     CMP.W    #6,D0
  11680.     BEQ.S    mmlp2
  11681.     CMP.W    #12,D0
  11682.     BEQ.S    mmlp3
  11683.     BRA.S    mmrok
  11684. mmlp1    MOVEQ    #4,D0
  11685.     BRA.S    mmrok
  11686. mmlp2    MOVEQ    #5,D0
  11687.     BRA.S    mmrok
  11688. mmlp3    MOVEQ    #8,D0
  11689.     BRA.S    mmrok
  11690.  
  11691. DisplayMix
  11692.     MOVE.W    #53,LineCurY
  11693.     MOVE.W    MixCurPos,D0
  11694.     LSL.W    #3,D0
  11695.     ADD.W    #132,D0
  11696.     MOVE.W    D0,LineCurX
  11697.     BSR    UpdateLineCurPos
  11698.     LEA    MixText(PC),A0
  11699.     MOVE.W    #1936,D1
  11700.     MOVEQ    #22,D0
  11701.     BSR    ShowText3
  11702.     BSR    Wait_4000
  11703.     BSR    Wait_4000
  11704.     BRA    Wait_4000
  11705.  
  11706. MixText    dc.b 'mix 01+02 to 03       '
  11707. MixChar    dc.b 0,0
  11708. MixCurPos dc.w 0
  11709. ToSam        dc.w 0
  11710. FromPtr1    dc.l 0
  11711. FromPtr2    dc.l 0
  11712. ToPtr        dc.l 0
  11713. MixPtr        dc.l 0
  11714. MixLength    dc.l 0
  11715.  
  11716. EndMix    CLR.B    RawKeyCode
  11717.     BSR    RestoreMix
  11718.     BRA    RestorePtrCol
  11719.  
  11720. RestoreMix
  11721.     CLR.W    GetLineFlag
  11722.     MOVE.W    #270,LineCurY
  11723.     CLR.W    LineCurX
  11724.     BSR    UpdateLineCurPos
  11725.     LEA    EditOpText3(PC),A0
  11726.     MOVE.W    #1936,D1
  11727.     MOVEQ    #22,D0
  11728.     BRA    ShowText3
  11729.  
  11730. Mix2    BSR    RestoreMix
  11731.     BSR    TurnOffVoices
  11732.     LEA    SamplePtrs,A2
  11733.     MOVEQ    #0,D0
  11734.     LEA    MixText+4(PC),A0
  11735.     BSR    HexToInteger2
  11736.     TST.W    D0
  11737.     BEQ    SamOutOfRange
  11738.     CMP.W    #$1F,D0
  11739.     BHI    SamOutOfRange
  11740.     LSL.W    #2,D0
  11741.     LEA    (A2,D0.W),A3
  11742.     MOVE.L    A3,FromPtr1
  11743.  
  11744.     MOVEQ    #0,D0
  11745.     LEA    MixText+7(PC),A0
  11746.     BSR    HexToInteger2
  11747.     TST.W    D0
  11748.     BEQ    SamOutOfRange
  11749.     CMP.W    #$1F,D0
  11750.     BHI    SamOutOfRange
  11751.     LSL.W    #2,D0
  11752.     LEA    (A2,D0.W),A3
  11753.     MOVE.L    A3,FromPtr2
  11754.  
  11755.     MOVEQ    #0,D0
  11756.     LEA    MixText+13(PC),A0
  11757.     BSR    HexToInteger2
  11758.     MOVE.W    D0,ToSam
  11759.     BEQ    SamOutOfRange
  11760.     CMP.W    #$1F,D0
  11761.     BHI    SamOutOfRange
  11762.     LSL.W    #2,D0
  11763.     LEA    (A2,D0.W),A3
  11764.     MOVE.L    A3,ToPtr
  11765.  
  11766.     MOVE.L    FromPtr1,A1
  11767.     MOVE.L    FromPtr2,A2
  11768.     MOVE.L    124(A1),D1
  11769.     MOVE.L    124(A2),D2
  11770.     CMP.L    D1,D2
  11771.     BLO.S    mixnswp
  11772.     EXG    D1,D2
  11773. mixnswp    TST.L    D1
  11774.     BEQ    SamEmptyError ; Both samples had length=0
  11775.     MOVE.L    D1,D0
  11776.     AND.L    #$FFFF,D0
  11777.     MOVE.L    D0,MixLength
  11778.     MOVE.L    #MEMF_CHIP!MEMF_CLEAR,D1
  11779.     MOVE.L    4.W,A6
  11780.     JSR    LVOAllocMem(A6)
  11781.     MOVE.L    D0,MixPtr
  11782.     BEQ    SamMemError ; No memory for new sample...
  11783.  
  11784.     LEA    MixingText(PC),A0
  11785.     BSR    ShowStatusText
  11786.     MOVE.L    FromPtr1(PC),A1
  11787.     MOVE.L    124(A1),D1
  11788.     MOVE.L    (A1),A1
  11789.     MOVE.L    FromPtr2(PC),A2
  11790.     MOVE.L    124(A2),D2
  11791.     MOVE.L    (A2),A2
  11792.     MOVE.L    MixPtr(PC),A3
  11793.     MOVE.L    MixLength,D3
  11794.     TST.W    D1
  11795.     BEQ.S    mixnd1
  11796.     SUBQ.W    #1,D1
  11797. mixnd1    TST.W    D2
  11798.     BEQ.S    mixnd2
  11799.     SUBQ.W    #1,D2
  11800. mixnd2    SUBQ.W    #1,D3
  11801.  
  11802. mixlop2    MOVE.B    (A1),D4
  11803.     EXT.W    D4
  11804.     MOVE.B    (A2),D0
  11805.     EXT.W    D0
  11806.     ADD.W    D4,D0
  11807.     TST.B    HalfClipFlag
  11808.     BEQ    mixhalf
  11809.     CMP.W    #127,D0
  11810.     BLE.S    mixnbig
  11811.     MOVEQ    #127,D0
  11812. mixnbig    CMP.W    #-128,D0
  11813.     BGE    mixokok
  11814.     MOVEQ    #-128,D0
  11815.     BRA    mixokok
  11816. mixhalf    ASR.W    #1,D0
  11817. mixokok    MOVE.B    D0,(A3)+
  11818.  
  11819.     TST.W    D1
  11820.     BEQ.S    zerd1
  11821.     ADDQ.L    #1,A1
  11822.     SUBQ.W    #1,D1
  11823.     BNE.S    zerd1
  11824.     SUB.L    A1,A1
  11825.  
  11826. zerd1    TST.W    D2
  11827.     BEQ.S    zerd2
  11828.     ADDQ.L    #1,A2
  11829.     SUBQ.W    #1,D2
  11830.     BNE.S    zerd2
  11831.     SUB.L    A2,A2
  11832.  
  11833. zerd2    DBRA    D3,mixlop2
  11834.     MOVE.W    ToSam(PC),InsNum
  11835.     BSR    FreeSample
  11836.     MOVE.L    ToPtr(PC),A0
  11837.     MOVE.L    MixPtr(PC),A1
  11838.     CLR.W    (A1)
  11839.     MOVE.L    A1,(A0)
  11840.     MOVE.L    MixLength(PC),124(A0)
  11841.     MOVE.L    SongDataPtr(PC),A0
  11842.     MOVE.W    ToSam(PC),D0
  11843.     SUBQ.W    #1,D0
  11844.     MULU    #30,D0
  11845.     LEA    20(A0,D0.W),A0
  11846.     MOVE.L    MixLength(PC),D0
  11847.     LSR.W    #1,D0
  11848.     MOVE.W    D0,22(A0)
  11849.     MOVE.W    #$0040,24(A0)
  11850.     MOVE.W    #$0000,26(A0)
  11851.     MOVE.W    #$0001,28(A0)
  11852.     BSR    RestorePtrCol
  11853.     BSR    ShowAllRight
  11854.     BSR    ShowSampleInfo
  11855.     BRA    DisplaySample
  11856.  
  11857. SamOutOfRange
  11858.     LEA    mixerrtext1(PC),A0
  11859.     BSR    ShowStatusText
  11860.     BRA    ErrorRestoreCol
  11861. SamEmptyError
  11862.     LEA    mixerrtext2(PC),A0
  11863.     BSR    ShowStatusText
  11864.     BRA    ErrorRestoreCol
  11865. SamMemError
  11866.     LEA    mixerrtext3(PC),A0
  11867.     BSR    ShowStatusText
  11868.     BRA    ErrorRestoreCol
  11869. OutOfMemErr
  11870.     LEA    mixerrtext3(PC),A0
  11871.     BSR    ShowStatusText
  11872.     BSR    SetErrorPtrCol
  11873.     MOVEQ    #0,D0
  11874.     RTS
  11875.  
  11876. mixerrtext1    dc.b 'not range 01-1F !',0
  11877. mixerrtext2    dc.b 'empty samples !!!',0
  11878. mixerrtext3    dc.b 'out of memory !!!',0
  11879. mixingtext    dc.b 'mixing samples...',0
  11880.  
  11881. OldMix    MOVE.L    SamplePos(PC),FlangePos
  11882. DoMix    BSR    StorePtrCol
  11883.     BSR    SetWaitPtrCol
  11884.     MOVEQ    #0,D2
  11885.     MOVE.W    SampleInfo(PC),D2 ; 22(A0)
  11886.     BEQ    Return2
  11887.     LSL.W    #1,D2
  11888.     MOVE.L    si_pointer(PC),D0
  11889.     BEQ    ErrorRestoreCol
  11890.     BSR    AllocBuffer
  11891.     MOVE.L    D0,A2
  11892.     MOVE.L    D0,A3
  11893.     MOVE.L    A1,A4
  11894.     ADD.L    D2,A3
  11895.     ADD.L    FlangePos(PC),A2
  11896.     CLR.L    ModOffset
  11897.     CLR.L    ModPos
  11898.     MOVEQ    #-1,D7
  11899. mixloop    ADDQ.L    #1,D7
  11900.     CMP.L    A3,A2
  11901.     BHS    mixskip
  11902.     MOVE.L    MarkStartOfs(PC),D0
  11903.     BMI.S    omxget
  11904.     MOVE.L    MarkEndOfs(PC),D1
  11905.     CMP.L    D0,D1
  11906.     BEQ.S    omxget
  11907.     CMP.L    D0,D7
  11908.     BLO.S    omxok2
  11909.     CMP.L    D1,D7
  11910.     BHI.S    omxok2
  11911. omxget    MOVE.B    (A2),D0
  11912.     EXT.W    D0
  11913.     MOVE.B    (A1),D1
  11914.     EXT.W    D1
  11915.     ADD.W    D1,D0
  11916.     TST.B    HalfClipFlag
  11917.     BEQ.S    omxhalf
  11918.     CMP.W    #127,D0
  11919.     BLE.S    omxnbig
  11920.     MOVEQ    #127,D0
  11921. omxnbig    CMP.W    #-128,D0
  11922.     BGE.S    omxokok
  11923.     MOVEQ    #-128,D0
  11924.     BRA.S    omxokok
  11925. omxhalf    ASR.W    #1,D0
  11926. omxokok    MOVE.B    D0,(A2)+
  11927.     BSR    UpdateMod
  11928.     BRA.S    mixloop
  11929. omxok2    ADDQ.L    #1,A2
  11930.     BSR    UpdateMod
  11931.     BRA.S    mixloop
  11932.  
  11933. mixskip    MOVE.L    si_pointer(PC),A1
  11934.     CLR.W    (A1)
  11935.     BSR    FreeBuffer
  11936.     BSR    RestorePtrCol
  11937.     BSR    WaitForButtonUp
  11938.     TST.W    DispOrRedraw
  11939.     BEQ    DisplaySample
  11940.     CLR.W    DispOrRedraw
  11941.     BRA    RedrawSample
  11942.  
  11943. DispOrRedraw    dc.w 0
  11944.  
  11945. AllocBuffer
  11946.     MOVE.L    D0,D7
  11947.     MOVE.L    D2,D0
  11948.     MOVE.L    D2,BufMemSize
  11949.     MOVE.L    #MEMF_CLEAR,D1
  11950.     MOVE.L    4.W,A6
  11951.     JSR    LVOAllocMem(A6)
  11952.     MOVE.L    D0,BufMemPtr
  11953.     BEQ    OutOfMemErr
  11954.     MOVE.L    D7,A0
  11955.     MOVE.L    D0,A1
  11956.     MOVE.L    BufMemSize(PC),D0
  11957.     SUBQ.L    #1,D0
  11958. albloop    MOVE.B    (A0)+,(A1)+
  11959.     DBRA    D0,albloop
  11960.     MOVE.L    BufMemPtr(PC),A1
  11961.     MOVE.L    D7,D0
  11962.     RTS
  11963.  
  11964. FreeBuffer
  11965.     MOVE.L    BufMemPtr(PC),D0
  11966.     BEQ    Return2
  11967.     MOVE.L    D0,A1
  11968.     MOVE.L    BufMemSize(PC),D0
  11969.     MOVE.L    4.W,A6
  11970.     JSR    LVOFreeMem(A6)
  11971.     CLR.L    BufMemPtr
  11972.     RTS
  11973.  
  11974. Echo    MOVE.L    SamplePos(PC),FlangePos
  11975.     BSR    WaitForButtonUp
  11976.     BSR    StorePtrCol
  11977.     BSR    SetWaitPtrCol
  11978.     MOVEQ    #0,D2
  11979.     MOVE.W    SampleInfo(PC),D2 ; 22(A0)
  11980.     BEQ    ErrorRestoreCol
  11981.     LSL.W    #1,D2
  11982.     MOVE.L    si_pointer(PC),D0
  11983.     BEQ    ErrorRestoreCol
  11984.     MOVE.L    D0,A1
  11985.     MOVE.L    D0,A2
  11986.     MOVE.L    D0,A3
  11987.     MOVE.L    D0,A4
  11988.     ADD.L    D2,A3
  11989.     ADD.L    FlangePos(PC),A2
  11990.     CLR.L    ModOffset
  11991.     CLR.L    ModPos
  11992. flaloop    CMP.L    A3,A2
  11993.     BHS    flaskip
  11994.     MOVE.B    (A2),D0
  11995.     EXT.W    D0
  11996.     MOVE.B    (A1),D1
  11997.     EXT.W    D1
  11998.     ADD.W    D1,D0
  11999.     ASR.W    #1,D0
  12000.     MOVE.B    D0,(A2)+
  12001.     BSR    UpdateMod
  12002.     BRA    flaloop
  12003. flaskip    MOVE.L    si_pointer(PC),A1
  12004.     CLR.W    (A1)
  12005.     BSR    RestorePtrCol
  12006.     TST.B    HalfClipFlag
  12007.     BEQ    DisplaySample
  12008.     MOVE.W    SampleVol,-(SP)
  12009.     MOVE.W    #200,SampleVol
  12010.     BSR    DoChangeVol
  12011.     MOVE.W    (SP)+,SampleVol
  12012.     BRA    DisplaySample
  12013.  
  12014. Filter2    MOVE.W    #1,DispOrRedraw
  12015. Filter    CLR.B    RawKeyCode
  12016.     LEA    FilteringText,A0
  12017.     BSR    ShowStatusText
  12018.     MOVE.L    #1,FlangePos
  12019.     MOVE.B    ModSpeed(PC),-(SP)
  12020.     MOVE.B    HalfClipFlag,-(SP)
  12021.     CLR.B    ModSpeed
  12022.     CLR.B    HalfClipFlag
  12023.     BSR    DoMix
  12024.     MOVE.B    (SP)+,HalfClipFlag
  12025.     MOVE.B    (SP)+,ModSpeed
  12026.     BRA    ShowAllRight
  12027.  
  12028. FilteringText    dc.b 'filtering',0
  12029.  
  12030. Boost    BSR.S    Boost3
  12031.     BRA    DisplaySample
  12032. Boost2    BSR.S    Boost3
  12033.     BRA    RedrawSample
  12034. Boost3    CLR.B    RawKeyCode
  12035.     BSR    WaitForButtonUp
  12036.     BSR    StorePtrCol
  12037.     BSR    SetWaitPtrCol
  12038.     LEA    BoostingText,A0
  12039.     BSR    ShowStatusText
  12040.     MOVEQ    #0,D3
  12041.     MOVE.W    SampleInfo(PC),D3
  12042.     BEQ    booend
  12043.     LSL.W    #1,D3
  12044.     SUBQ.W    #1,D3
  12045.     MOVE.L    si_pointer(PC),D0
  12046.     BEQ    booend
  12047.     MOVE.L    D0,A1
  12048.     MOVE.L    MarkStartOfs(PC),D0
  12049.     BMI.S    booskp1
  12050.     MOVE.L    MarkEndOfs(PC),D1
  12051.     SUB.L    D0,D1
  12052.     BEQ.S    booskp1
  12053.     MOVE.L    D1,D3
  12054.     MOVE.L    SamStart(PC),A1
  12055.     ADD.L    D0,A1
  12056. booskp1    MOVEQ    #0,D0
  12057. booloop    MOVE.B    (A1),D1
  12058.     EXT.W    D1
  12059.     MOVE.W    D1,D2
  12060.     SUB.W    D0,D1
  12061.     MOVE.W    D2,D0
  12062.     TST.W    D1
  12063.     BMI    booneg
  12064.     ASR.W    #2,D1
  12065.     ADD.W    D1,D2
  12066.     BRA    booskip
  12067. booneg    NEG.W    D1
  12068.     ASR.W    #2,D1
  12069.     SUB.W    D1,D2
  12070. booskip    CMP.W    #127,D2
  12071.     BLE    booskp2
  12072.     MOVEQ    #127,D2
  12073. booskp2    CMP.W    #-128,D2
  12074.     BGE    booskp3
  12075.     MOVEQ    #-128,D2
  12076. booskp3    MOVE.B    D2,(A1)+
  12077.     DBRA    D3,booloop
  12078.     MOVE.L    si_pointer(PC),A1
  12079.     CLR.W    (A1)
  12080. booend    BSR    ShowAllRight
  12081.     BRA    RestorePtrCol
  12082.     
  12083. BoostingText    dc.b 'boosting',0,0
  12084.  
  12085. XFade    BSR    WaitForButtonUp
  12086.     BSR    StorePtrCol
  12087.     BSR    SetWaitPtrCol
  12088.     MOVEQ    #0,D2
  12089.     MOVE.W    SampleInfo(PC),D2 ; 22(A0)
  12090.     BEQ    ErrorRestoreCol
  12091.     ADD.W    D2,D2
  12092.     MOVE.L    si_pointer(PC),D0
  12093.     BEQ    ErrorRestoreCol
  12094.     MOVE.L    D0,A1
  12095.     MOVE.L    D0,A2
  12096.     ADD.L    D2,A2
  12097. xfaloop    MOVE.B    (A1),D0
  12098.     EXT.W    D0
  12099.     MOVE.B    -(A2),D1
  12100.     EXT.W    D1
  12101.     ADD.W    D1,D0
  12102.     TST.B    HalfClipFlag
  12103.     BEQ    xfahalf
  12104.     CMP.W    #127,D0
  12105.     BLE    xfanbig
  12106.     MOVEQ    #127,D0
  12107. xfanbig    CMP.W    #-128,D0
  12108.     BGE    xfaokok
  12109.     MOVEQ    #-128,D0
  12110.     BRA    xfaokok
  12111. xfahalf    ASR.W    #1,D0
  12112. xfaokok    MOVE.B    D0,(A1)+
  12113.     MOVE.B    D0,(A2)
  12114.     CMP.L    A2,A1
  12115.     BLO.S    xfaloop
  12116.     MOVE.L    si_pointer(PC),A1
  12117.     CLR.W    (A1)
  12118.     BSR    RestorePtrCol
  12119.     BRA    DisplaySample
  12120.  
  12121. Backwards
  12122.     BSR    WaitForButtonUp
  12123.     BSR    StorePtrCol
  12124.     BSR    SetWaitPtrCol
  12125.     MOVEQ    #0,D2
  12126.     MOVE.W    22(A5),D2
  12127.     BEQ    ErrorRestoreCol
  12128.     MOVE.L    si_pointer(PC),D0
  12129.     BEQ    ErrorRestoreCol
  12130.     MOVE.L    D0,A1
  12131.     MOVE.L    D0,A2
  12132.     ADD.L    D2,D2
  12133.     ADD.L    D2,A2
  12134.     MOVE.L    MarkStartOfs(PC),D0
  12135.     BMI.S    bacloop
  12136.     MOVE.L    MarkEndOfs(PC),D1
  12137.     SUB.L    D0,D1
  12138.     BEQ.S    bacloop
  12139.     MOVE.L    SamStart(PC),A1
  12140.     ADD.L    D0,A1
  12141.     MOVE.L    A1,A2
  12142.     ADD.L    D1,A2
  12143. bacloop    MOVE.B    (A1),D0
  12144.     MOVE.B    -(A2),(A1)+
  12145.     MOVE.B    D0,(A2)
  12146.     CMP.L    A2,A1
  12147.     BLO.S    bacloop
  12148.     MOVE.L    si_pointer(PC),A1
  12149.     CLR.W    (A1)
  12150.     BSR    RestorePtrCol
  12151.     BRA    DisplaySample
  12152.  
  12153. Upsample
  12154.     BSR    WaitForButtonUp
  12155.     LEA    UpsampleText,A0
  12156.     BSR    AreYouSure
  12157.     BNE    Return2
  12158.     BSR    TurnOffVoices
  12159.     BSR    StorePtrCol
  12160.     BSR    SetWaitPtrCol
  12161.     MOVE.W    InsNum(PC),D0
  12162.     LSL.W    #2,D0
  12163.     LEA    SamplePtrs(PC),A0
  12164.     LEA    (A0,D0.W),A0
  12165.     MOVE.L    124(A0),D3
  12166.     CMP.L    #2,D3
  12167.     BLS    ErrorRestoreCol
  12168.     MOVE.L    (A0),D0
  12169.     BEQ    ErrorRestoreCol
  12170.     MOVE.L    D0,A2
  12171.     MOVE.L    D0,A4
  12172.     MOVE.L    D3,D4
  12173.     LSR.L    #1,D3
  12174.     BCLR    #0,D3
  12175.     MOVE.L    D3,D0
  12176.     MOVEQ    #MEMF_CHIP,D1
  12177.     MOVE.L    4.W,A6
  12178.     JSR    LVOAllocMem(A6)
  12179.     TST.L    D0
  12180.     BEQ.S    upserro
  12181.     MOVE.L    D0,A3
  12182.     MOVE.L    D0,D2
  12183.     MOVE.L    D3,D5
  12184.     SUBQ.L    #1,D3
  12185. upsloop    MOVE.B    (A2)+,(A3)+
  12186.     ADDQ.L    #1,A2
  12187.     DBRA    D3,upsloop
  12188.     MOVE.L    A4,A1
  12189.     MOVE.L    D4,D0
  12190.     MOVE.L    4.W,A6
  12191.     JSR    LVOFreeMem(A6)
  12192.     MOVE.W    InsNum(PC),D0
  12193.     LSL.W    #2,D0
  12194.     LEA    SamplePtrs(PC),A0
  12195.     LEA    (A0,D0.W),A0
  12196.     MOVE.L    D2,(A0)
  12197.     MOVE.L    D5,124(A0)
  12198.     MOVE.L    D2,A0
  12199.     CLR.W    (A0)
  12200.     MOVE.W    22(A5),D0
  12201.     LSR.W    #1,D0
  12202.     MOVE.W    D0,22(A5)
  12203.     MOVE.W    26(A5),D0
  12204.     LSR.W    #1,D0
  12205.     MOVE.W    D0,26(A5)
  12206.     MOVE.W    28(A5),D0
  12207.     LSR.W    #1,D0
  12208.     BNE    upsskip2
  12209.     MOVEQ    #1,D0
  12210. upsskip2
  12211.     MOVE.W    D0,28(A5)
  12212.     BSR    ShowSampleInfo
  12213.     BSR    WaitForButtonUp
  12214.     BSR    RestorePtrCol
  12215.     BRA    RedrawSample
  12216.  
  12217. upserro    BSR    RestorePtrCol
  12218.     BRA    OutOfMemErr
  12219.  
  12220. DownSample
  12221.     BSR    WaitForButtonUp
  12222.     TST.W    InsNum
  12223.     BEQ    NotSampleNull
  12224.     LEA    DownSampleText,A0
  12225.     BSR    AreYouSure
  12226.     BNE    Return2
  12227.     BSR    TurnOffVoices
  12228.     BSR    StorePtrCol
  12229.     BSR    SetWaitPtrCol
  12230.     MOVE.L    si_pointer(PC),D0
  12231.     BEQ    ErrorRestoreCol
  12232.     MOVEQ    #0,D0
  12233.     MOVE.W    SampleInfo(PC),D0
  12234.     BEQ    ErrorRestoreCol
  12235.     LSL.L    #1,D0
  12236.     CMP.L    #$FFFE,D0
  12237.     BHI    ErrorRestoreCol
  12238.     LSL.L    #1,D0
  12239.     CMP.L    #$FFFE,D0
  12240.     BLS    dnsskip
  12241.     MOVE.L    #$FFFE,D0
  12242. dnsskip    MOVE.L    D0,BufMemSize
  12243.     MOVEQ    #MEMF_CHIP,D1
  12244.     MOVE.L    4.W,A6
  12245.     JSR    LVOAllocMem(A6)
  12246.     MOVE.L    D0,BufMemPtr
  12247.     BEQ    SamMemError
  12248.     MOVE.L    si_pointer(PC),A1
  12249.     MOVE.L    D0,A2
  12250.     MOVE.L    BufMemSize,D3
  12251.     LSR.L    #1,D3
  12252.     SUBQ.L    #1,D3
  12253. dnsloop    MOVE.B    (A1)+,D0
  12254.     MOVE.B    D0,(A2)+
  12255.     MOVE.B    D0,(A2)+
  12256.     DBRA    D3,dnsloop
  12257.     BSR    FreeSample
  12258.     LEA    SamplePtrs,A0
  12259.     MOVE.W    InsNum(PC),D0
  12260.     LSL.W    #2,D0
  12261.     MOVE.L    BufMemPtr,(A0,D0.W)
  12262.     MOVE.L    BufMemSize,124(A0,D0.W)
  12263.     MOVE.W    22(A5),D0
  12264.     LSL.W    #1,D0
  12265.     CMP.W    #$7FFF,D0
  12266.     BLS    dnsok1
  12267.     MOVE.W    #$7FFF,D0
  12268. dnsok1    MOVE.W    D0,22(A5)
  12269.     MOVE.W    26(A5),D0
  12270.     LSL.W    #1,D0
  12271.     CMP.W    #$7FFF,D0
  12272.     BLS    dnsok2
  12273.     MOVE.W    #$7FFF,D0
  12274. dnsok2    MOVE.W    D0,26(A5)
  12275.     MOVE.W    28(A5),D0
  12276.     CMP.W    #1,D0
  12277.     BEQ    dnsok3
  12278.     LSL.W    #1,D0
  12279.     CMP.W    #$7FFF,D0
  12280.     BLS    dnsok3
  12281.     MOVE.W    #$7FFF,D0
  12282. dnsok3    MOVE.W    D0,28(A5)
  12283.     BSR    ShowSampleInfo
  12284.     BSR    WaitForButtonUp
  12285.     BSR    RestorePtrCol
  12286.     BRA    RedrawSample
  12287.  
  12288. SamplePos    dc.l    0
  12289. SampleVol    dc.w    100
  12290. FlangePos    dc.l    0
  12291. ModSpeed    dc.b    0
  12292. HalfClipFlag    dc.b    0
  12293. ModPos        dc.l    0
  12294. ModOffset    dc.l    0
  12295. BufMemPtr    dc.l    0
  12296. BufMemSize    dc.l    0
  12297.  
  12298. ;---- Save Song ----
  12299.  
  12300. SaveSong
  12301.     BSR    StopIt
  12302.     CLR.B    RawKeyCode
  12303.     MOVE.L    SongDataPtr(PC),A0
  12304.     LEA    SampleLengthAdd(PC),A1
  12305.     MOVEQ    #0,D0
  12306.     MOVEQ    #2,D1
  12307. sadloop    MOVE.W    (A1,D1.W),D2
  12308.     ADD.W    D2,42(A0,D0.W)
  12309.     ADD.W    #30,D0
  12310.     ADDQ.W    #2,D1
  12311.     CMP.W    #62,D1
  12312.     BNE    sadloop
  12313.  
  12314.     LEA    sd_pattpos(A0),A0
  12315.     MOVEQ    #0,D0
  12316.     MOVEQ    #0,D1
  12317.     MOVEQ    #0,D2
  12318.     CLR.W    HighPattNum
  12319. ssloop    MOVE.B    0(A0,D0.W),D1
  12320.     ADDQ.W    #1,D0
  12321.     CMP.W    #128,D0
  12322.     BHI    DoSaveSong
  12323.     MOVE.W    HighPattNum(PC),D2
  12324.     CMP.W    D2,D1
  12325.     BLS    ssloop
  12326.     MOVE.W    D1,HighPattNum
  12327.     BRA    ssloop
  12328.  
  12329. DoSaveSong
  12330.     LEA    SongsPath2,A0
  12331.     JSR    CopyPath
  12332.     MOVE.L    SongDataPtr(PC),A0
  12333.     MOVEQ    #19,D0
  12334. dssloop    MOVE.B    (A0)+,(A1)+
  12335.     DBRA    D0,dssloop
  12336.     MOVE.L    #FileName,FileNamePtr
  12337.     MOVE.L    SongDataPtr(PC),DiskDataPtr
  12338.     MOVE.L    #1084,DiskDataLength
  12339.     MOVEQ    #0,D0
  12340.     MOVE.W    HighPattNum,D0
  12341.     ADDQ.L    #1,D0
  12342.     LSL.L    #8,D0
  12343.     LSL.L    #2,D0
  12344.     ADD.L    D0,DiskDataLength
  12345.     MOVE.B    PackMode,D0
  12346.     BTST    #0,D0
  12347.     BEQ    dssnocr
  12348.     LEA    CrunchingText(PC),A0
  12349.     BSR    ShowStatusText
  12350.     BSR    Cruncher
  12351. dssnocr    BSR    DoSaveData
  12352.     MOVE.B    PackMode,D0
  12353.     BTST    #0,D0
  12354.     BEQ    dssnoc2
  12355.     LEA    DecrunchingText(PC),A0
  12356.     BSR    ShowStatusText
  12357.     BSR    Decruncher
  12358. dssnoc2    MOVE.L    SongDataPtr(PC),A0
  12359.     LEA    SampleLengthAdd(PC),A1
  12360.     MOVEQ    #0,D0
  12361.     MOVEQ    #2,D1
  12362. ssuloop    MOVE.W    (A1,D1.W),D2
  12363.     SUB.W    D2,42(A0,D0.W)
  12364.     ADD.W    #30,D0
  12365.     ADD.W    #2,D1
  12366.     CMP.W    #62,D1
  12367.     BNE    ssuloop
  12368.     BSR    ShowAllRight
  12369.     BRA    SetNormalPtrCol
  12370.  
  12371. Cruncher
  12372.     BSR    SetNormalPtrCol
  12373.     MOVE.L    SongDataPtr(PC),A0
  12374.     MOVE.L    A0,A1
  12375.     LEA    12(A1),A1
  12376.     MOVE.L    A1,SongPlus12Ptr
  12377.     MOVE.L    A0,A1
  12378.     ADD.L    #70716,A1    ; hoeh...
  12379.     MOVE.L    A1,SongPlus70kPtr
  12380.     MOVE.L    A0,A1
  12381.     ADD.L    #70716,A1
  12382.     SUB.L    DiskDataLength(PC),A1
  12383.     MOVE.L    A1,EndOfSongPtr
  12384.     MOVE.L    DiskDataLength(PC),RealSongLength
  12385.     MOVE.L    SongDataPtr(PC),A0
  12386.     ADD.L    DiskDataLength(PC),A0
  12387.     MOVE.L    SongDataPtr(PC),A1
  12388.     ADD.L    #70716,A1
  12389.     MOVE.L    DiskDataLength(PC),D0
  12390. cloop    MOVE.B    -(A0),-(A1)
  12391.     SUBQ.L    #1,D0
  12392.     BNE    cloop
  12393.     BSR    DoCrunch
  12394.     SUB.L    SongPlus12Ptr(PC),A2
  12395.     MOVE.L    A2,D0
  12396.     MOVE.L    D0,CrunchedSongLength
  12397.     MOVE.L    D0,D1
  12398.     ADD.L    SongPlus12Ptr(PC),D1
  12399.     MOVE.L    D1,DontKnowWhat
  12400.     MOVE.L    SongDataPtr(PC),A0
  12401.     MOVE.L    #'PACK',(A0)
  12402.     MOVE.L    CrunchedSongLength,4(A0)
  12403.     MOVE.L    RealSongLength(PC),8(A0)
  12404.     MOVE.L    SongDataPtr(PC),DiskDataPtr
  12405.     MOVE.L    CrunchedSongLength(PC),D0
  12406.     ADD.L    #12,D0
  12407.     MOVE.L    D0,DiskDataLength
  12408.     RTS    
  12409.  
  12410. EndOfSongPtr        dc.l    0
  12411. SongPlus70kPtr        dc.l    0
  12412. RealSongLength        dc.l    0
  12413. SongPlus12Ptr        dc.l    0
  12414. DontKnowWhat        dc.l    0
  12415. CrunchedSongLength    dc.l    0
  12416.  
  12417. DoCrunch
  12418.     MOVE.L    EndOfSongPtr(PC),A0
  12419.     MOVE.L    SongPlus70kPtr(PC),A1
  12420.     MOVE.L    SongPlus12Ptr(PC),A2
  12421.     MOVEQ    #1,D2
  12422.     CLR.W    D1
  12423. dcloop    BSR    DoCrunch2
  12424.     TST.B    D0
  12425.     BEQ    dcskip
  12426.     ADDQ.W    #1,D1
  12427.     CMP.W    #$0108,D1
  12428.     BNE    dcskip
  12429.     BSR    DoCrunch6
  12430. dcskip    CMP.L    A0,A1
  12431.     BGT    dcloop
  12432.     BSR    DoCrunch6
  12433.     BRA    DoCrunch8
  12434.  
  12435. DoCrunch2
  12436.     MOVE.L    A0,A3
  12437.     LEA    127(A3),A3
  12438.     CMP.L    A1,A3
  12439.     BLE    dc2skip
  12440.     MOVE.L    A1,A3
  12441. dc2skip    MOVEQ    #1,D5
  12442.     MOVE.L    A0,A5
  12443.     ADDQ.L    #1,A5
  12444. dc2_1    MOVE.B    (A0),D3
  12445.     MOVE.B    1(A0),D4
  12446.     MOVE.W    D3,$DFF1A2
  12447. dc2loop    CMP.B    (A5)+,D3
  12448.     BNE    dc2skip2
  12449.     CMP.B    (A5),D4
  12450.     BEQ    DoCrunch3
  12451. dc2skip2
  12452.     CMP.L    A5,A3
  12453.     BGT    dc2loop
  12454.     BRA    dc4_3
  12455.  
  12456. DoCrunch3
  12457.     SUBQ.L    #1,A5
  12458.     MOVE.L    A0,A4
  12459. dc3loop    MOVE.B    (A4)+,D3
  12460.     CMP.B    (A5)+,D3
  12461.     BNE    dc3skip
  12462.     CMP.L    A5,A3
  12463.     BGT    dc3loop
  12464. dc3skip    MOVE.L    A4,D3
  12465.     SUB.L    A0,D3
  12466.     SUBQ.L    #1,D3
  12467.     CMP.L    D3,D5
  12468.     BGE    dc4_2
  12469.     MOVE.L    A5,D4
  12470.     SUB.L    A0,D4
  12471.     SUB.L    D3,D4
  12472.     SUBQ.L    #1,D4
  12473.     CMP.L    #4,D3
  12474.     BLE    DoCrunch4
  12475.     MOVEQ    #6,D6
  12476.     CMP.L    #$00000101,D3
  12477.     BLT    dc3skip2
  12478.     MOVE.W    #$0100,D3
  12479. dc3skip2
  12480.     BRA    dc4_1
  12481.  
  12482. DoCrunch4
  12483.     MOVE.W    D3,D6
  12484.     SUBQ.W    #2,D6
  12485.     LSL.W    #1,D6
  12486. dc4_1    LEA    CrunchData3(PC),A6
  12487.     CMP.W    0(A6,D6.W),D4
  12488.     BGE    dc4_2
  12489.     MOVE.L    D3,D5
  12490.     MOVE.L    D4,CrunchData1
  12491.     MOVE.B    D6,CrunchData2
  12492. dc4_2    CMP.L    A5,A3
  12493.     BGT    dc2_1
  12494. dc4_3    CMP.L    #1,D5
  12495.     BEQ    DoCrunch5
  12496.     BSR    DoCrunch6
  12497.     MOVE.B    CrunchData2(PC),D6
  12498.     MOVE.L    CrunchData1(PC),D3
  12499.     MOVE.W    8(A6,D6.W),D0
  12500.     BSR    DoCrunch7
  12501.     MOVE.W    $0010(A6,D6.W),D0
  12502.     BEQ    dc4skip
  12503.     MOVE.L    D5,D3
  12504.     SUBQ.W    #1,D3
  12505.     BSR    DoCrunch7
  12506. dc4skip    MOVE.W    $0018(A6,D6.W),D0
  12507.     MOVE.W    $0020(A6,D6.W),D3
  12508.     BSR    DoCrunch7
  12509.     ADDQ.W    #1,$0028(A6,D6.W)
  12510.     ADD.L    D5,A0
  12511.     CLR.B    D0
  12512.     RTS    
  12513.  
  12514. DoCrunch5
  12515.     MOVE.B    (A0)+,D3
  12516.     MOVEQ    #8,D0
  12517.     BSR    DoCrunch7
  12518.     MOVEQ    #1,D0
  12519.     RTS    
  12520.  
  12521. CrunchData1    dc.l    0
  12522. CrunchData2    dc.b    0,0
  12523. CrunchData3    dc.w    $0100,$0200,$0400,$1000,8,9,10,8
  12524.         dc.w    0,0,0,8,2,3,3,3,1,4,5,6,0,0,0,0
  12525. CrunchData4    dc.w    0
  12526. CrunchData5    dc.w    0
  12527.  
  12528. DoCrunch6
  12529.     TST.W    D1
  12530.     BEQ    Return2
  12531.     MOVE.W    D1,D3
  12532.     CLR.W    D1
  12533.     CMP.W    #9,D3
  12534.     BGE    dc6_2
  12535.     ADDQ.W    #1,CrunchData4
  12536.     SUBQ.W    #1,D3
  12537.     MOVEQ    #5,D0
  12538.     BRA    DoCrunch7
  12539.  
  12540. dc6_2    ADDQ.W    #1,CrunchData5
  12541.     SUB.W    #9,D3
  12542.     OR.W    #$0700,D3
  12543.     MOVEQ    #11,D0
  12544. DoCrunch7
  12545.     SUBQ.W    #1,D0
  12546. dc7loop    LSR.L    #1,D3
  12547.     ROXL.L    #1,D2
  12548.     BCS    dc8_2
  12549.     DBRA    D0,dc7loop
  12550.     RTS    
  12551.  
  12552. DoCrunch8
  12553.     CLR.W    D0
  12554. dc8_2    MOVE.L    D2,(A2)+
  12555.     MOVEQ    #1,D2
  12556.     DBRA    D0,dc7loop
  12557.     RTS
  12558.  
  12559.  
  12560. Decruncher
  12561.     MOVE.L    SongDataPtr(PC),A0
  12562.     LEA    12(A0),A0
  12563.     MOVE.L    EndOfSongPtr(PC),A1
  12564.     MOVE.L    CrunchedSongLength(PC),D0
  12565.     MOVE.L    RealSongLength(PC),D1
  12566.     BSR    DoDecrunch
  12567.     MOVE.L    EndOfSongPtr(PC),A0
  12568.     MOVE.L    SongDataPtr(PC),A1
  12569.     MOVE.L    RealSongLength(PC),D0
  12570. ddcloop    MOVE.B    (A0)+,(A1)+
  12571.     SUBQ.L    #1,D0
  12572.     BNE    ddcloop
  12573.     MOVE.L    SongDataPtr(PC),A0
  12574.     ADD.L    #$0001143C,A0
  12575.     MOVE.L    SongDataPtr(PC),A1
  12576.     ADD.L    RealSongLength(PC),A1
  12577.     SUB.L    A1,A0
  12578.     MOVE.L    A0,D0
  12579. ddcloop2
  12580.     CLR.B    (A1)+
  12581.     SUBQ.L    #1,D0
  12582.     BNE    ddcloop2
  12583.     RTS    
  12584.  
  12585. DoDecrunch
  12586.     ADD.L    D0,A0
  12587.     MOVE.L    D1,A2
  12588.     ADD.L    A1,A2
  12589.     MOVE.L    -(A0),D0
  12590. dec_1    LSR.L    #1,D0
  12591.     BNE.S    decskip
  12592.     BSR.S    dec5
  12593. decskip    BCS.S    dec3
  12594.     MOVEQ    #8,D1
  12595.     MOVEQ    #1,D3
  12596.     LSR.L    #1,D0
  12597.     BNE.S    decskip2
  12598.     BSR.S    dec5
  12599. decskip2
  12600.     BCS.S    dec4_1
  12601.     MOVEQ    #3,D1
  12602.     CLR.W    D4
  12603. dec_2    BSR.S    dec6
  12604.     MOVE.W    D2,D3
  12605.     ADD.W    D4,D3
  12606. decloop1
  12607.     MOVEQ    #7,D1
  12608. decloop2
  12609.     LSR.L    #1,D0
  12610.     BNE.S    decskip3
  12611.     BSR.S    dec5
  12612. decskip3
  12613.     ROXL.L    #1,D2
  12614.     DBRA    D1,decloop2
  12615.     MOVE.B    D2,-(A2)
  12616.     DBRA    D3,decloop1
  12617.     BRA.S    dec4_3
  12618.  
  12619. dec2    MOVEQ    #8,D1
  12620.     MOVEQ    #8,D4
  12621.     BRA.S    dec_2
  12622.  
  12623. dec3    MOVEQ    #2,D1
  12624.     BSR.S    dec6
  12625.     CMP.B    #2,D2
  12626.     BLT.S    dec4
  12627.     CMP.B    #3,D2
  12628.     BEQ.S    dec2
  12629.     MOVEQ    #8,D1
  12630.     BSR.S    dec6
  12631.     MOVE.W    D2,D3
  12632.     MOVE.W    #8,D1
  12633.     BRA.S    dec4_1
  12634.  
  12635. dec4    MOVE.W    #9,D1
  12636.     ADD.W    D2,D1
  12637.     ADDQ.W    #2,D2
  12638.     MOVE.W    D2,D3
  12639. dec4_1    BSR.S    dec6
  12640. dec4_2    SUBQ.W    #1,A2
  12641.     MOVE.B    0(A2,D2.W),(A2)
  12642.     DBRA    D3,dec4_2
  12643. dec4_3    CMP.L    A2,A1
  12644.     BLT.S    dec_1
  12645.     RTS    
  12646.  
  12647. dec5    MOVE.L    -(A0),D0
  12648.     MOVE.W    D0,$DFF1A2
  12649.     MOVE    #$10,CCR
  12650.     ROXR.L    #1,D0
  12651.     RTS    
  12652.  
  12653. dec6    SUBQ.W    #1,D1
  12654.     CLR.W    D2
  12655. dec6loop
  12656.     LSR.L    #1,D0
  12657.     BNE.S    dec6skip
  12658.     MOVE.L    -(A0),D0
  12659.     MOVE.W    D0,$DFF1A2
  12660.     MOVE    #$10,CCR
  12661.     ROXR.L    #1,D0
  12662. dec6skip
  12663.     ROXL.L    #1,D2
  12664.     DBRA    D1,dec6loop
  12665.     RTS    
  12666.  
  12667. LoadModule
  12668.     MOVE.W    #1,LoadInProgress
  12669.     BSR    DoClearSong
  12670.     BSR    ClrSampleInfo
  12671.     JSR    SetDiskPtrCol
  12672.     LEA    ModulesPath2,A0
  12673.     JSR    CopyPath
  12674.     LEA    DirInputName,A0
  12675.     MOVEQ    #DirNameLength-1,D0
  12676. lmloop2    MOVE.B    (A0)+,(A1)+
  12677.     DBRA    D0,lmloop2
  12678.     LEA    LoadingModuleText(PC),A0
  12679.     BSR    ShowStatusText
  12680.     MOVE.L    DOSbase(PC),A6
  12681.     MOVE.L    #FileName,D1
  12682.     MOVE.L    #1005,D2
  12683.     JSR    LVOOpen(A6)
  12684.     MOVE.L    D0,FileHandle
  12685.     BEQ    CantOpenFile
  12686.     MOVE.L    D0,D1
  12687.     MOVE.L    SongDataPtr(PC),D2
  12688.     MOVE.L    #1084,D3
  12689.     JSR    LVORead(A6)
  12690.     MOVE.L    SongDataPtr(PC),A0
  12691.     CMP.L    #'PP20',(A0)
  12692.     BEQ    PowerPacked
  12693.     MOVE.B    #127,sd_numofpatt+1(A0) ; Set maxpatt to 127
  12694.     CMP.L    #'M.K.',sd_mahokakt(A0)    ; M.K. again...
  12695.     BEQ    lmskip
  12696.     BSR    MahoneyAndKaktus
  12697.     BNE    lmskip
  12698.     MOVE.L    FileHandle(PC),D1
  12699.     MOVE.L    #600,D2
  12700.     MOVEQ    #-1,D3
  12701.     JSR    LVOSeek(A6)
  12702. lmskip    LEA    LoadingModuleText(PC),A0
  12703.     BSR    ShowStatusText
  12704.     MOVE.L    SongDataPtr(PC),A0
  12705.     LEA    sd_pattpos(A0),A0
  12706.     MOVEQ    #0,D0
  12707.     MOVE.B    -1(A0),D0
  12708.     MOVEQ    #0,D3
  12709. lmloop3    CMP.B    (A0)+,D3
  12710.     BHI    lmskip2
  12711.     MOVE.B    -1(A0),D3
  12712. lmskip2    DBRA    D0,lmloop3
  12713.     ADDQ.W    #1,D3
  12714.     MULU    #1024,D3
  12715.     MOVE.L    FileHandle(PC),D1
  12716.     MOVE.L    SongDataPtr(PC),D2
  12717.     ADD.L    #1084,D2
  12718.     MOVE.L    DOSBase,A6
  12719.     JSR    LVORead(A6)
  12720.     CLR.L    PatternNumber
  12721.     CLR.L    CurrPos
  12722.     BSR    RedrawPattern
  12723.     CLR.W    ScrPattPos
  12724.     BSR    SetScrPatternPos
  12725.     MOVE.W    #1,InsNum
  12726.     BSR    CheckAbort
  12727.     BEQ    rmiend
  12728.     TST.B    AutoExitFlag
  12729.     BEQ    readinstrloop
  12730.     JSR    ExitFromDir
  12731. readinstrloop
  12732.     TST.B    NosamplesFlag
  12733.     BNE    rmiend
  12734.     BSR    CheckAbort
  12735.     BEQ    rmiend
  12736.     BSR    ShowSampleInfo
  12737.     MOVE.W    InsNum(PC),TuneUp
  12738.     JSR    DoShowFreeMem
  12739.     MOVE.L    SongDataPtr(PC),A0
  12740.     MOVE.W    InsNum(PC),D7
  12741.     MULU    #30,D7
  12742.     MOVEQ    #0,D0
  12743.     MOVE.W    12(A0,D7.W),D0
  12744.     BEQ    rminext
  12745.     ADD.L    D0,D0
  12746.     MOVE.L    4.W,A6
  12747.     MOVE.L    #MEMF_CHIP!MEMF_CLEAR,D1
  12748.     MOVE.L    D0,-(SP)
  12749.     JSR    LVOAllocMem(A6)
  12750.     MOVE.L    (SP)+,D6
  12751.     TST.L    D0
  12752.     BNE    ReadModInstrument
  12753.     BSR    OutOfMemErr
  12754.     MOVE.L    DOSbase(PC),A6
  12755.     MOVE.L    FileHandle(PC),D1
  12756.     MOVE.L    D6,D2
  12757.     MOVEQ    #0,D3
  12758.     BRA    rminext
  12759.  
  12760. ReadModInstrument
  12761.     MOVE.W    InsNum(PC),D7
  12762.     LSL.W    #2,D7
  12763.     LEA    SamplePtrs(PC),A0
  12764.     MOVE.L    D0,0(A0,D7.W)
  12765.     MOVE.L    D6,124(A0,D7.W)
  12766.     MOVE.L    DOSbase(PC),A6
  12767.     MOVE.L    FileHandle(PC),D1
  12768.     MOVE.L    D0,D2
  12769.     MOVE.L    D6,D3
  12770.     JSR    LVORead(A6)
  12771.     BSR    RedrawSample
  12772. rminext    ADDQ.W    #1,InsNum
  12773.     CMP.W    #32,InsNum
  12774.     BNE    readinstrloop
  12775. rmiend    MOVE.L    FileHandle(PC),D1
  12776.     MOVE.L    DOSbase(PC),A6
  12777.     JSR    LVOClose(A6)
  12778.     MOVE.W    #1,InsNum
  12779.     MOVE.L    #6,CurrSpeed
  12780.     CLR.W    LoadInProgress
  12781.     BSR    ShowAllRight
  12782.     JSR    SetNormalPtrCol
  12783.     BSR    CheckInstrLengths
  12784.     BSR    ShowSampleInfo
  12785.     BSR    RedrawSample
  12786.     JMP    DoShowFreeMem
  12787.  
  12788. PowerPacked
  12789.     LEA    PowerPackedText,A0
  12790.     BSR    ShowStatusText
  12791.     JSR    SetErrorPtrCol
  12792.     BSR    DoClearSong
  12793.     BSR    ClrSampleInfo
  12794.     BRA    rmiend
  12795.  
  12796. PowerPackedText    dc.b "Powerpacker mod.!",0
  12797.  
  12798.  
  12799.  
  12800. SaveModule
  12801.     JSR    StorePtrCol
  12802.     JSR    SetDiskPtrCol
  12803.     MOVE.L    SongDataPtr(PC),A0
  12804.     LEA    sd_pattpos(A0),A0
  12805.     MOVEQ    #0,D0
  12806.     MOVEQ    #0,D1
  12807.     MOVEQ    #0,D2
  12808.     CLR.W    HighPattNum
  12809. smloop    MOVE.B    0(A0,D0.W),D1
  12810.     ADDQ.W    #1,D0
  12811.     CMP.W    #128,D0
  12812.     BHI    DoSaveModule
  12813.     MOVE.W    HighPattNum(PC),D2
  12814.     CMP.W    D2,D1
  12815.     BLS    smloop
  12816.     MOVE.W    D1,HighPattNum
  12817.     BRA    smloop
  12818.  
  12819. DoSaveModule
  12820.     LEA    ModulesPath2,A0
  12821.     JSR    CopyPath
  12822.     MOVE.B    #'m',(A1)+
  12823.     MOVE.B    #'o',(A1)+
  12824.     MOVE.B    #'d',(A1)+
  12825.     MOVE.B    #'.',(A1)+
  12826.     MOVE.L    SongDataPtr(PC),A0
  12827.     MOVEQ    #19,D0
  12828. dsmloop2
  12829.     MOVE.B    (A0)+,(A1)+
  12830.     DBRA    D0,dsmloop2
  12831.     MOVE.L    SongDataPtr(PC),A0
  12832.     MOVE.L    A0,DiskDataPtr
  12833.     MOVE.L    #1084,DiskDataLength
  12834.     MOVEQ    #0,D0
  12835.     MOVE.W    HighPattNum(PC),D0
  12836.     ADDQ.L    #1,D0
  12837.     LSL.L    #8,D0
  12838.     LSL.L    #2,D0
  12839.     ADD.L    D0,DiskDataLength    ; Add 1024 x NumOfPatt
  12840.     MOVE.B    #127,sd_numofpatt+1(A0) ; Set maxpatt to 127
  12841.     MOVE.L    #'M.K.',sd_mahokakt(A0)    ; M.K. again...
  12842.     LEA    SavingModuleText(PC),A0
  12843.     BSR    ShowStatusText
  12844.     BTST    #2,$DFF016
  12845.     BEQ    CantOpenFile
  12846.     BSR    OpenModForWrite
  12847.     BNE    CantOpenFile
  12848.     BSR    WriteModuleData
  12849.     BNE    WriteModError
  12850.     BTST    #2,$DFF016
  12851.     BEQ    WriteModError
  12852.     MOVE.W    InsNum(PC),SaveInstrNum
  12853.     MOVEQ    #1,D6
  12854. saveinstrloop
  12855.     MOVE.W    D6,InsNum
  12856.     BSR    ShowSampleInfo
  12857.     BSR    WriteInstrument
  12858.     TST.L    D0
  12859.     BNE.S    WriteModError
  12860.     ADDQ.B    #1,D6
  12861.     CMP.B    #32,D6
  12862.     BNE    saveinstrloop
  12863.     BSR    CloseWriteMod
  12864.     MOVE.W    SaveInstrNum(PC),InsNum
  12865.     BSR    ShowSampleInfo
  12866.     BSR    ShowAllRight
  12867.     JMP    RestorePtrCol
  12868.  
  12869. SaveInstrNum    dc.w 0
  12870.  
  12871. WriteModError
  12872.     BSR    CloseWriteMod
  12873.     BRA    CantSaveFile
  12874.  
  12875. WriteInstrument
  12876.     MOVE.W    D6,D0
  12877.     LSL.W    #2,D0
  12878.     LEA    SamplePtrs(PC),A0
  12879.     MOVE.L    0(A0,D0.W),D1
  12880.     BEQ    Return2
  12881.     MOVE.L    124(A0,D0.W),D0
  12882.     BEQ    Return2
  12883.     MOVE.L    D1,DiskDataPtr
  12884.     MOVE.L    SongDataPtr(PC),A0
  12885.     LEA    12(A0),A0
  12886.     MOVE.W    D6,D0
  12887.     MULU    #30,D0
  12888.     ADD.L    D0,A0
  12889.     MOVEQ    #0,D0
  12890.     MOVE.W    (A0),D0
  12891.     LSL.L    #1,D0
  12892.     MOVE.L    D0,DiskDataLength
  12893.     BNE.S    WriteModuleData
  12894.     RTS
  12895.  
  12896. OpenModForWrite
  12897.     MOVE.L    DOSbase(PC),A6
  12898.     MOVE.L    #FileName,D1
  12899.     MOVE.L    #1006,D2
  12900.     JSR    LVOOpen(A6)
  12901.     MOVE.L    D0,D7
  12902.     BEQ.S    wmfailed
  12903.     MOVEQ    #0,D0
  12904.     RTS
  12905.  
  12906. WriteModuleData
  12907.     MOVE.L    DOSbase(PC),A6
  12908.     MOVE.L    D7,D1
  12909.     MOVE.L    DiskDataPtr(PC),D2
  12910.     MOVE.L    DiskDataLength(PC),D3
  12911.     BEQ    .okok
  12912.     JSR    LVOWrite(A6)
  12913.     CMP.L    DiskDataLength(PC),D3
  12914.     BNE.S    wmfailed
  12915. ;    JSR    LVOIoErr(A6)
  12916. ;    TST.L    D0
  12917. ;    BNE.S    wmfailed
  12918.     MOVEQ    #0,D0
  12919. .okok    RTS
  12920.  
  12921. wmfailed
  12922.     MOVEQ    #-1,D0
  12923.     RTS    
  12924.  
  12925. CloseWriteMod
  12926.     MOVE.L    DOSbase(PC),A6
  12927.     MOVE.L    D7,D1
  12928.     JMP    LVOClose(A6)
  12929.  
  12930. ;---- Load PLST ----
  12931.  
  12932. LoadPLST
  12933.     LEA    LoadPLSTText,A0
  12934.     JSR    AreYouSure
  12935.     BNE    Return2
  12936.     JSR    WaitForButtonUp
  12937.     LEA    LoadingPLSTText(PC),A0
  12938.     BSR    ShowStatusText
  12939. DoLoadPLST
  12940.     JSR    StorePtrCol
  12941.     LEA    PTPath,A0
  12942.     JSR    CopyPath
  12943.     LEA    PLSTName(PC),A0
  12944.     MOVEQ    #4,D0
  12945. dlploop    MOVE.B    (A0)+,(A1)+
  12946.     DBRA    D0,dlploop
  12947.     MOVE.L    #FileName,D1
  12948.     MOVE.L    #1005,D2
  12949.     MOVE.L    DOSbase(PC),A6
  12950.     JSR    LVOOpen(A6)
  12951.     MOVE.L    D0,D7
  12952.     BEQ    PLSTOpenErr
  12953.     JSR    SetDiskPtrCol
  12954.     CLR.L    PresetTotal
  12955.     BSR.S    AllocPLST
  12956.     MOVE.L    PLSTmem(PC),D2
  12957.     BEQ    PLSTMemErr2
  12958.     MOVE.L    D7,D1
  12959.     MOVE.L    PLSTallocsize,D3
  12960.     MOVE.L    DOSBase(PC),A6
  12961.     JSR    LVORead(A6)
  12962.     MOVE.L    D0,MaxPLSTOffset
  12963.     DIVU    #30,D0
  12964.     MOVE.W    D0,PresetTotal
  12965. cloplst    MOVE.L    D7,D1
  12966.     MOVE.L    DOSbase(PC),A6
  12967.     JSR    LVOClose(A6)
  12968. ;    BSR    PLSTCheckNum
  12969. ;    BSR    ShowAllRight
  12970.     JMP    RestorePtrCol
  12971.  
  12972. PLSTname    dc.b    'PLST',0,0
  12973.  
  12974. AllocPLST
  12975.     BSR.S    FreePLST
  12976.     MOVE.W    MaxPLSTEntries,D0
  12977.     BEQ    Return2
  12978.     MULU    #30,D0
  12979.     MOVE.L    D0,PLSTAllocSize
  12980.     MOVE.L    #MEMF_CLEAR,D1
  12981.     MOVE.L    4.W,A6
  12982.     JSR    LVOAllocMem(A6)
  12983.     MOVE.L    D0,PLSTmem
  12984.     MOVE.W    MaxPLSTEntries,MaxPLSTEntries2
  12985.     RTS
  12986.  
  12987. FreePLST
  12988.     CLR.W    MaxPLSTEntries2
  12989.     CLR.L    MaxPLSTOffset
  12990.     CLR.W    PresetTotal
  12991.     MOVE.L    PLSTmem,D0
  12992.     BEQ    Return2
  12993.     MOVE.L    D0,A1
  12994.     MOVE.L    PLSTAllocSize,D0
  12995.     MOVE.L    4.W,A6
  12996.     JSR    LVOFreeMem(A6)
  12997.     CLR.L    PLSTmem
  12998.     RTS
  12999.  
  13000. PLSTMemErr2
  13001.     BSR.S    PLSTMemErr
  13002.     BRA    cloplst
  13003.  
  13004. PLSTMemErr
  13005.     TST.W    MaxPLSTEntries
  13006.     BEQ.S    reptrco
  13007.     BSET    #0,InitError
  13008.     LEA    PLSTMemText,A0
  13009. plster    BSR.S    ShowStatusText
  13010.     MOVE.W    #50,WaitTime
  13011.     JMP    ErrorRestoreCol
  13012. reptrco    JMP    RestorePtrCol
  13013. PLSTOpenErr
  13014.     TST.W    MaxPLSTEntries
  13015.     BEQ.S    reptrco
  13016.     BSET    #1,InitError
  13017.     LEA    PLSTOpenText,A0
  13018.     BRA.S    plster
  13019.  
  13020. PLSTMemText    dc.b 'no mem for plst !',0
  13021. PLSTOpenText    dc.b 'plst not found ! ',0
  13022. InitError    dc.b 0,0
  13023.  
  13024.  
  13025. ShowAllRight
  13026.     MOVEM.L    D0-D7/A0-A6,-(SP)
  13027.     LEA    AllRightText(PC),A0
  13028.     BSR.S    ShowStatusText
  13029.     MOVEM.L    (SP)+,D0-D7/A0-A6
  13030.     RTS    
  13031.  
  13032. ShowStatusText
  13033.     MOVE.L    TextBplPtr(PC),A1
  13034.     ADD.L    #5131,A1
  13035.     MOVEQ    #4,D0
  13036. stloop1    MOVEQ    #16,D1
  13037. stloop2    CLR.B    (A1)+
  13038.     DBRA    D1,stloop2
  13039.     LEA    23(A1),A1
  13040.     DBRA    D0,stloop1
  13041.     MOVE.L    A0,A1
  13042.     MOVE.W    #5131,D1
  13043.     MOVEQ    #-1,D0
  13044. stloop3    ADDQ.W    #1,D0
  13045.     TST.B    (A1)+
  13046.     BNE.S    stloop3
  13047.     BRA    ShowText3
  13048.  
  13049. ;---- Redraw Pattern ----
  13050.  
  13051. RedrawPattern
  13052.     TST.W    SamScrEnable
  13053.     BNE    Return2
  13054.     SF    PattRfsh
  13055.     MOVE.W    #5121,TextOffset
  13056.     MOVE.W    PatternNumber+2(PC),WordNumber
  13057.     BSR    Print2DecDigits ; Print PatternNumber
  13058.     MOVE.L    SongDataPtr(PC),A6
  13059.     LEA    $043C(A6),A6
  13060.     MOVE.L    PatternNumber,D6
  13061.     LSL.L    #8,D6
  13062.     LSL.L    #2,D6
  13063.     ADD.L    D6,A6
  13064.     MOVE.W    #7521,TextOffset
  13065.     CLR.L    PPattPos
  13066.     LEA    PeriodTable(PC),A2
  13067.     LEA    RedrawBuffer(PC),A3
  13068.     LEA    FastHexTable(PC),A4
  13069.     MOVEQ    #'0',D4
  13070.     MOVE.B    BlankZeroFlag,D5
  13071.     MOVEQ    #63,D6
  13072. rpnxpos    MOVEQ    #3,D7
  13073.     MOVE.W    PPattPos+2(PC),WordNumber
  13074.     BSR    Print2DecDigits ; Print PatternPosition
  13075.     ADDQ.W    #1,TextOffset
  13076.     ADDQ.L    #1,PPattPos
  13077. rploop    MOVEQ    #0,D0
  13078.     MOVEQ    #0,D1
  13079.     MOVE.W    (A6),D1
  13080.     AND.W    #$0FFF,D1
  13081.     BNE.S    rpfind
  13082.     MOVE.L    #'--- ',(A3)
  13083.     BRA.S    rpskip
  13084. rpfind    MOVEQ    #36,D2
  13085. rpfindloop
  13086.     CMP.W    (A2,D0.W),D1
  13087.     BEQ.S    rpfound
  13088.     ADDQ.L    #2,D0
  13089.     DBRA    D2,rpfindloop
  13090.     MOVE.L    #'??? ',(A3)
  13091.     BRA.S    rpskip
  13092. rpfound    LSL.L    #1,D0
  13093.     ADD.L    NoteNamesPtr(PC),D0
  13094.     MOVE.L    D0,A0
  13095.     MOVE.L    (A0),(A3)
  13096. rpskip    MOVE.B    (A6)+,D0
  13097.     LSR.B    #4,D0
  13098.     ADD.B    #'0',D0
  13099.     MOVE.B    D0,3(A3)
  13100.     MOVE.B    (A6)+,D0
  13101.     MOVEQ    #0,D0
  13102.     MOVE.B    (A6)+,D0
  13103.     ADD.W    D0,D0
  13104.     MOVE.W    (A4,D0.W),4(A3)
  13105.     MOVEQ    #0,D0
  13106.     MOVE.B    (A6)+,D0
  13107.     ADD.W    D0,D0
  13108.     MOVE.W    (A4,D0.W),6(A3)
  13109.  
  13110.     TST.B    D5
  13111.     BEQ.S    rpskp3
  13112.     CMP.B    3(A3),D4
  13113.     BNE.S    rpskp3
  13114.     MOVE.B    #' ',3(A3)
  13115. rpskp3    MOVE.W    #9,TextLength
  13116.     MOVE.L    A3,ShowTextPtr
  13117.     BSR    ShowText
  13118.     DBRA    D7,rploop  ; Next Channel
  13119.     ADD.W    #241,TextOffset
  13120.     DBRA    D6,rpnxpos ; Next PattPos
  13121.     RTS
  13122.  
  13123. RedrawBuffer    dc.b '---00000 ',0
  13124.  
  13125.  
  13126. ShowPosition
  13127.     MOVE.L    SongDataPtr(PC),A0
  13128.     LEA    952(A0),A0
  13129.     ADD.L    CurrPos(PC),A0
  13130.     MOVE.B    (A0),WordNumber+1
  13131.     MOVE.B    (A0),PattRfshNum+3
  13132.     MOVEQ    #0,D1
  13133.     MOVE.B    (A0),D1
  13134.     CMP.B    LongFFFF+3(PC),D1
  13135.     BEQ.S    spskip2
  13136.     ST    PattRfsh
  13137. spskip2    MOVE.W    #608,TextOffset
  13138.     MOVE.B    (A0),LongFFFF+3
  13139.     CMP.W    #0,CurrScreen
  13140.     BEQ.S    spokok
  13141.     CMP.W    #1,CurrScreen
  13142.     BEQ.S    spokok
  13143.     CMP.W    #6,CurrScreen
  13144.     BEQ.S    spokok
  13145.     RTS
  13146. spokok    BSR    Print4DecDigits
  13147.     MOVE.W    CurrPos+2,WordNumber
  13148.     MOVE.W    #168,TextOffset
  13149.     BRA    Print4DecDigits
  13150.  
  13151.  
  13152. ShowSongLength
  13153.     CMP.W    #2,CurrScreen
  13154.     BEQ.S    ShowSongName
  13155.     CMP.W    #3,CurrScreen
  13156.     BEQ.S    ShowSongName
  13157.     CMP.W    #4,CurrScreen
  13158.     BEQ    Return2
  13159.     CMP.W    #5,CurrScreen
  13160.     BEQ.S    ShowSongName
  13161.     MOVE.L    SongDataPtr(PC),A0
  13162.     LEA    sd_numofpatt(A0),A0
  13163.     MOVE.L    A0,CurrCmds
  13164.     CLR.W    WordNumber
  13165.     MOVE.B    (A0),WordNumber+1
  13166.     MOVE.W    #1048,TextOffset
  13167.     BSR    Print4DecDigits
  13168.     MOVE.L    CurrCmds(PC),A0
  13169. ShowSongName
  13170.     MOVE.L    SongDataPtr(PC),A0
  13171.     MOVE.W    #4133,D1
  13172.     MOVEQ    #20,D0
  13173.     BRA    ShowText3
  13174.  
  13175.  
  13176. ShowSampleInfo    
  13177.     MOVEQ    #0,D0
  13178.     MOVE.W    InsNum(PC),D0
  13179.     MOVE.W    D0,PlayInsNum
  13180.     BNE.S    ssiskipit
  13181.     MOVE.W    LastInsNum(PC),D0
  13182. ssiskipit
  13183.     MOVE.W    D0,D1
  13184.     LSL.L    #2,D0
  13185.     LEA    SamplePtrs(PC),A0
  13186.     MOVE.L    (A0,D0.W),si_pointer
  13187.     MOVE.L    SongDataPtr(PC),A0
  13188.     LEA    -10(A0),A0
  13189.     MOVE.W    D1,D0
  13190.     MULU    #30,D0
  13191.     ADD.L    D0,A0
  13192.     MOVE.L    A0,CurrCmds
  13193.     MOVE.L    22(A0),SampleInfo
  13194.     MOVE.L    26(A0),si_long
  13195.     TST.B    NoSampleInfo
  13196.     BNE    ssiskip
  13197.  
  13198.     MOVE.L    A0,-(SP)
  13199.     MOVE.B    #' ',FineTuneSign
  13200.     MOVE.B    24(A0),D0
  13201.     BEQ.S    dopfitu
  13202.     MOVE.B    #'+',FineTuneSign
  13203.     BTST    #3,D0
  13204.     BEQ.S    dopfitu
  13205.     MOVE.B    #'-',FineTuneSign
  13206.     MOVEQ    #16,D1
  13207.     SUB.B    D0,D1
  13208.     MOVE.B    D1,D0
  13209. dopfitu    MOVE.W    #1491,TextOffset
  13210.     BSR    PrintHexDigit  ; FineTune
  13211.     LEA    FineTuneSign(PC),A0
  13212.     MOVE.W    #1490,D1
  13213.     MOVEQ    #1,D0
  13214.     BSR    ShowText3  ; FineTuneSign
  13215.     MOVE.L    (SP)+,A0
  13216.  
  13217.     CLR.W    WordNumber
  13218.     MOVE.B    25(A0),WordNumber+1
  13219.     MOVE.W    WordNumber,VolumeEfx
  13220.     OR.W    #$0C00,VolumeEfx
  13221.     MOVE.W    #2368,TextOffset
  13222.     BSR    PrintHexWord  ; Volume
  13223.  
  13224.     MOVEQ    #0,D0
  13225.     MOVE.W    SampleInfo(PC),D0
  13226.     LSL.L    #1,D0
  13227.     MOVE.W    D0,WordNumber
  13228.     MOVE.L    SamplePos,D2
  13229.     CMP.L    D0,D2
  13230.     BLS.S    ShowLen
  13231.     MOVE.L    D0,SamplePos
  13232.     BSR    ShowPos
  13233.     MOVEQ    #0,D0
  13234.     MOVE.W    SampleInfo(PC),D0
  13235.     LSL.L    #1,D0
  13236.     MOVE.W    D0,WordNumber
  13237. ShowLen    MOVE.W    #2808,TextOffset
  13238.     BSR    PrintHexWord  ; Length
  13239.  
  13240.     MOVE.W    si_long,D0
  13241.     ADD.W    D0,D0
  13242.     MOVE.W    D0,WordNumber
  13243.     MOVE.W    #3248,TextOffset
  13244.     BSR    PrintHexWord  ; Repeat
  13245.  
  13246.     MOVE.W    si_long+2,D0
  13247.     ADD.W    D0,D0
  13248.     MOVE.W    D0,WordNumber
  13249.     MOVE.W    #3688,TextOffset
  13250.     BSR    PrintHexWord  ; RepLen
  13251.  
  13252.     BSR.S    ssiinst
  13253.  
  13254. ssiskip    TST.B    NoSampleInfo
  13255.     BEQ.S    ssiskp2
  13256.     CMP.W    #5,CurrScreen
  13257.     BEQ.S    ssiskp2
  13258.     CMP.W    #3,CurrScreen
  13259.     BNE    Return2
  13260. ssiskp2    MOVE.L    CurrCmds(PC),A0
  13261.     MOVE.W    #4573,D1
  13262.     MOVEQ    #22,D0
  13263.     BRA    ShowText3  ; SampleName
  13264.  
  13265. ssiinst    TST.B    NoSampleInfo
  13266.     BNE    Return2
  13267.     MOVE.W    InsNum(PC),WordNumber
  13268.     MOVE.W    #1928,TextOffset
  13269.     BRA    PrintHexWord  ; SampleNumber
  13270.  
  13271. FineTuneSign    dc.b ' ',0
  13272. VolumeEfx    dc.w 0
  13273.  
  13274. ;---- Print Decimal Digits ----
  13275.  
  13276. Print2DecDigits
  13277.     MOVE.W    #2,TextLength
  13278.     MOVEQ    #0,D1
  13279.     MOVE.W    WordNumber(PC),D1
  13280.     LEA    NumberText(PC),A0
  13281.     BRA.S    pdig
  13282.  
  13283. Print3DecDigits
  13284.     MOVE.W    #3,TextLength
  13285.     MOVEQ    #0,D1
  13286.     MOVE.W    WordNumber(PC),D1
  13287.     LEA    NumberText(PC),A0
  13288.     BRA.S    pdig100
  13289.  
  13290. Print4DecDigits
  13291.     MOVE.W    #4,TextLength
  13292.     MOVEQ    #0,D1
  13293.     MOVE.W    WordNumber(PC),D1
  13294.     LEA    NumberText(PC),A0
  13295.     DIVU    #1000,D1
  13296.     BSR.S    DoOneDigit
  13297. pdig100    DIVU    #100,D1
  13298.     BSR.S    DoOneDigit
  13299. pdig    DIVU    #10,D1
  13300.     BSR.S    DoOneDigit
  13301.     BSR.S    DoOneDigit
  13302.     MOVE.L    #NumberText,A0
  13303.     BRA    ShowText2
  13304.  
  13305. DoOneDigit
  13306.     ADD.B    #'0',D1
  13307.     MOVE.B    D1,(A0)+
  13308.     CLR.W    D1
  13309.     SWAP    D1
  13310.     RTS
  13311.  
  13312. Print6DecDigits
  13313.     LEA    NumberText,A0
  13314.     MOVE.L    D0,D1
  13315.     CMP.L    #1000000,D1
  13316.     BHS    toobig
  13317.  
  13318.     SWAP    D1
  13319.     CLR.W    D1
  13320.     SWAP    D1
  13321.     DIVU    #10,D1
  13322.     SWAP    D1
  13323.     ADD.B    #'0',D1
  13324.     MOVE.B    D1,5(A0)
  13325.     CMP.L    #10,D0
  13326.     BLO.S    p6zero1
  13327.  
  13328.     DIVU    #100,D0
  13329.     MOVE.L    D0,D1
  13330.     CLR.W    D0
  13331.     SWAP    D0
  13332.     DIVU    #10,D0
  13333.     ADD.B    #'0',D0
  13334.     MOVE.B    D0,4(A0)
  13335.     AND.L    #$FFFF,D1
  13336.     BEQ.S    p6zero2
  13337.     DIVU    #10,D1
  13338.     SWAP    D1
  13339.     ADD.B    #'0',D1
  13340.     MOVE.B    D1,3(A0)
  13341.     CLR.W    D1
  13342.     SWAP    D1
  13343.     TST.W    D1
  13344.     BEQ.S    p6zero3
  13345.     DIVU    #10,D1
  13346.     SWAP    D1
  13347.     ADD.B    #'0',D1
  13348.     MOVE.B    D1,2(A0)
  13349.     CLR.W    D1
  13350.     SWAP    D1
  13351.     TST.W    D1
  13352.     BEQ.S    p6zero4
  13353.     DIVU    #10,D1
  13354.     SWAP    D1
  13355.     ADD.B    #'0',D1
  13356.     MOVE.B    D1,1(A0)
  13357.     CLR.W    D1
  13358.     SWAP    D1
  13359.     TST.W    D1
  13360.     BEQ.S    p6zero5
  13361.     DIVU    #10,D1
  13362.     SWAP    D1
  13363.     ADD.B    #'0',D1
  13364.     MOVE.B    D1,(A0)
  13365.     BRA.S    p6end
  13366.  
  13367. p6zero1    MOVE.B    #' ',4(A0)
  13368. p6zero2    MOVE.B    #' ',3(A0)
  13369. p6zero3    MOVE.B    #' ',2(A0)
  13370. p6zero4    MOVE.B    #' ',1(A0)
  13371. p6zero5    MOVE.B    #' ',0(A0)
  13372. p6end    MOVE.W    #6,TextLength
  13373.     BRA    ShowText2
  13374.  
  13375. toobig    MOVE.B    #' ',D0
  13376.     BSR.S    toobig2
  13377.     DIVU    #1000,D0
  13378.     MOVE.W    D0,WordNumber
  13379.     BSR    Print4DecDigits
  13380.     MOVE.B    #'K',D0
  13381. toobig2    LEA    NumberText(PC),A0
  13382.     MOVE.B    D0,(A0)
  13383.     MOVE.W    #1,TextLength
  13384.     BRA    ShowText2
  13385.  
  13386. NumberText    dcb.b    6,0
  13387.  
  13388. ;---- Print Hex Digits ----
  13389.  
  13390. PrintHiInstrNum
  13391.     MOVEQ    #0,D0
  13392.     TST.W    CurrentPlayNote
  13393.     BEQ.S    phin2
  13394.     MOVE.W    InsNum(PC),D0
  13395.     LSR.W    #4,D0
  13396.     BNE.S    PrintHexDigit
  13397. phin2    TST.B    BlankZeroFlag
  13398.     BEQ.S    PrintHexDigit
  13399.     LEA    BlankInsText(PC),A0
  13400.     BRA.S    phd2
  13401. PrintHexDigit
  13402.     AND.L    #$0F,D0
  13403.     ADD.L    D0,D0
  13404.     LEA    FastHexTable+1(PC),A0
  13405.     ADD.L    D0,A0
  13406. phd2    MOVE.W    #1,TextLength
  13407.     BRA.S    ShowText2
  13408.  
  13409. BlankInsText    dc.b " ",0
  13410.  
  13411. PrintHexWord
  13412.     LEA    WordNumber(PC),A0
  13413.     MOVEQ    #0,D0
  13414.     MOVE.B    (A0),D0
  13415.     LSL.L    #1,D0
  13416.     LEA    FastHexTable(PC),A0
  13417.     ADD.L    D0,A0
  13418.     MOVE.W    #2,TextLength
  13419.     BSR.S    ShowText2
  13420. PrintHexByte
  13421.     LEA    WordNumber(PC),A0
  13422.     MOVEQ    #0,D0
  13423.     MOVE.B    1(A0),D0
  13424.     LSL.L    #1,D0
  13425.     MOVE.L    #FastHexTable,A0
  13426.     ADD.L    D0,A0
  13427.     MOVE.W    #2,TextLength
  13428.     BSR.S    ShowText2
  13429.     CLR.W    WordNumber
  13430.     RTS    
  13431.  
  13432. ;---- Text Output Routines ----
  13433.  
  13434. ShowText3
  13435.     MOVE.W    D0,TextLength
  13436.     MOVE.W    D1,TextOffset
  13437. ShowText2
  13438.     MOVE.L    A0,ShowTextPtr
  13439. ShowText
  13440.     MOVEM.L    A2-A4,-(SP)
  13441.     LEA    TextTable(PC),A3
  13442.     LEA    FontData,A4
  13443.     MOVE.W    TextLength(PC),D0
  13444.     MOVE.L    TextBplPtr(PC),A1
  13445.     MOVE.W    TextOffset(PC),D1
  13446.     LEA    (A1,D1.W),A1
  13447.     ADD.W    D0,TextOffset
  13448.     MOVE.L    ShowTextPtr(PC),A0
  13449.     BRA.S    dstlope
  13450. dstloop    MOVEQ    #0,D1
  13451.     MOVE.B    (A0)+,D1
  13452.     BNE.S    dstskip
  13453.     MOVE.B    ShowZeroFlag(PC),D1
  13454. dstskip    MOVE.B    (A3,D1.W),D1
  13455.     LSL.W    #3,D1
  13456.     MOVE.L    A4,A2
  13457.     ADD.L    D1,A2
  13458.     MOVE.B    (A2)+,(A1)+
  13459.     MOVE.B    (A2)+,40-1(A1)
  13460.     MOVE.B    (A2)+,80-1(A1)
  13461.     MOVE.B    (A2)+,120-1(A1)
  13462.     MOVE.B    (A2),160-1(A1)
  13463. dstlope    DBRA    D0,dstloop
  13464.     MOVEM.L    (SP)+,A2-A4
  13465.     RTS    
  13466.  
  13467. SpaceShowText
  13468.     MOVE.W    ShowZeroFlag(PC),-(SP)
  13469.     MOVE.B    #' ',ShowZeroFlag
  13470.     BSR.S    ShowText
  13471.     MOVE.W    (SP)+,ShowZeroFlag
  13472.     RTS    
  13473.  
  13474. ShowZeroFlag    dc.b    95,0
  13475.  
  13476. TextTable
  13477.     dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; 0
  13478.     dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  13479.     dc.b 00,01,02,03,04,05,06,07,08,09,10,11,12,13,14,15 ; 32
  13480.     dc.b 16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31
  13481.     dc.b 32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47 ; 64
  13482.     dc.b 48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63
  13483.     dc.b 69,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47 ; 96
  13484.     dc.b 48,49,50,51,52,53,54,55,56,57,58,65,66,67,68,63
  13485.     dc.b 69,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; 128
  13486.     dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  13487.     dc.b 0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; 160
  13488.     dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  13489.     dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; 192
  13490.     dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  13491.     dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; 224
  13492.     dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  13493.  
  13494.  
  13495. ;---- Set Sprite Position ----
  13496.  
  13497. SetSpritePos
  13498.     ADD.W    #$002C,D1
  13499.     ADD.W    D1,D2
  13500.     ROL.W    #7,D2
  13501.     ASL.W    #1,D2
  13502.     BCC.S    sppskip
  13503.     OR.W    #2,D2
  13504. sppskip    ROL.W    #7,D1
  13505.     ASL.W    #1,D1
  13506.     BCC.S    sppskip2
  13507.     OR.W    #4,D2
  13508. sppskip2
  13509.     ADD.W    #$007D,D0
  13510.     ASR.W    #1,D0
  13511.     BCC.S    sppskip3
  13512.     OR.W    #1,D2
  13513. sppskip3
  13514.     OR.W    D0,D1
  13515.     MOVE.W    D1,(A0)
  13516.     MOVE.W    D2,2(A0)
  13517.     RTS    
  13518.  
  13519.  
  13520. ;---- DoLoad / DoSave Data ----
  13521.  
  13522. DoLoadData
  13523.     TST.L    DiskDataLength
  13524.     BEQ.S    dlsend
  13525.     TST.L    DiskDataPtr
  13526.     BEQ.S    dlsend
  13527.     JSR    SetDiskPtrCol
  13528.     LEA    LoadingText(PC),A0
  13529.     BSR    ShowStatusText
  13530.     MOVE.L    DOSbase(PC),A6
  13531.     MOVE.L    FileNamePtr(PC),D1
  13532.     MOVE.L    #1005,D2
  13533.     JSR    LVOOpen(A6)
  13534.     MOVE.L    D0,FileHandle
  13535.     BEQ.S    CantOpenFile
  13536.     MOVE.L    FileHandle(PC),D1
  13537.     MOVE.L    DiskDataPtr(PC),D2
  13538.     MOVE.L    DiskDataLength(PC),D3
  13539.     JSR    LVORead(A6)
  13540.     MOVE.L    FileHandle(PC),D1
  13541.     JSR    LVOClose(A6)
  13542. dlsend    CLR.L    FileHandle
  13543.     JSR    SetNormalPtrCol
  13544.      MOVEQ    #-1,D0
  13545.     RTS
  13546.  
  13547. CantOpenFile
  13548.     LEA    CantOpenFileText(PC),A0
  13549. caopfil    BSR    ShowStatusText
  13550.     JSR    SetErrorPtrCol
  13551.      MOVEQ    #0,D0
  13552.     RTS
  13553.  
  13554. CantSaveFile
  13555.     LEA    CantSaveFileText(PC),A0
  13556.     BRA.S    caopfil
  13557. CantExamFile
  13558.     LEA    CantExamFileText(PC),A0
  13559.     BRA.S    caopfil
  13560. CantFindFile
  13561.     LEA    CantFindFileText(PC),A0
  13562.     BRA.S    caopfil
  13563. FileIsEmpty
  13564.     LEA    FileIsEmptyText(PC),A0
  13565.     BRA.S    caopfil
  13566.  
  13567. CantOpenFileText    dc.b "can't open file !",0
  13568. CantSaveFileText    dc.b "can't save file !",0
  13569. CantExamFileText    dc.b "examine error !",0
  13570. CantFindFileText    dc.b "can't find file !",0
  13571. FileIsEmptyText        dc.b "file is empty !",0
  13572.  
  13573. DoSaveData
  13574.     JSR    SetDiskPtrCol
  13575.     LEA    SavingText(PC),A0
  13576.     BSR    ShowStatusText
  13577.     MOVE.L    DOSbase(PC),A6
  13578.     MOVE.L    FileNamePtr(PC),D1
  13579.     MOVE.L    #1006,D2
  13580.     JSR    LVOOpen(A6)
  13581.     MOVE.L    D0,FileHandle
  13582.     BEQ    CantOpenFile
  13583.     MOVE.L    FileHandle(PC),D1
  13584.     MOVE.L    DiskDataPtr(PC),D2
  13585.     MOVE.L    DiskDataLength(PC),D3
  13586.     JSR    LVOWrite(A6)
  13587.     MOVE.L    FileHandle(PC),D1
  13588.     JSR    LVOClose(A6)
  13589.     CLR.L    FileHandle
  13590.     JMP    SetNormalPtrCol
  13591.  
  13592. ;---- PLST ----
  13593.  
  13594. PLST    CLR.B    RawKeyCode
  13595.     CMP.W    #6,CurrScreen
  13596.     BEQ    ExitPLST
  13597.     CMP.W    #1,CurrScreen
  13598.     BNE    Return2
  13599.     JSR    WaitForButtonUp
  13600.     MOVE.W    #6,CurrScreen
  13601.     JSR    ClearRightArea
  13602.     JSR    ClearAnalyzerColors
  13603.     BSR.S    DrawPLSTScreen
  13604.     BEQ    ExitPLST
  13605.     BSR    RedrawPLST
  13606. PLST_rts
  13607.     RTS
  13608.  
  13609. DrawPLSTScreen
  13610.     LEA    PLSTData,A0
  13611.     MOVE.L    #PLSTSize,D0
  13612.     BSR    Decompact
  13613.     BEQ    Return2
  13614.     LEA    TopMenusPos,A0
  13615.     MOVEQ    #98,D0
  13616. dplstloop1
  13617.     MOVEQ    #24,D1
  13618. dplstloop2
  13619.     MOVE.B    2574(A1),10240(A0)
  13620.     MOVE.B    (A1)+,(A0)+
  13621.     DBRA    D1,dplstloop2
  13622.     LEA    15(A0),A0
  13623.     ADDQ.L    #1,A1
  13624.     DBRA    D0,dplstloop1
  13625.     BSR    FreeDecompMem
  13626.     MOVEQ    #-1,D0
  13627.     RTS
  13628.  
  13629. ShowDiskNames
  13630.     MOVE.W    #616,TextOffset
  13631.     MOVE.W    #5,TextLength
  13632.     MOVE.L    #STText1,A0
  13633.     BSR    ShowText2
  13634.     ADDQ.W    #1,TextOffset
  13635.     MOVE.L    #STText2,A0
  13636.     BSR    ShowText2
  13637.     ADDQ.W    #1,TextOffset
  13638.     MOVE.L    #STText3,A0
  13639.     BRA    ShowText2
  13640.  
  13641. PLSTCheckNum
  13642.     TST.L    PLSTmem
  13643.     BEQ    NoPLST
  13644.     TST.L    MaxPLSTOffset
  13645.     BEQ    NoPLST
  13646.     MOVE.L    PLSTmem(PC),A0
  13647.     MOVE.W    PresetTotal(PC),D7
  13648.     SUBQ.W    #1,D7
  13649.     TST.B    STText1Number
  13650.     BNE    plstsskip
  13651.     TST.B    STText2Number
  13652.     BNE    plstsskip
  13653.     TST.B    STText3Number
  13654.     BEQ    PLSTMarkAll
  13655. plstsskip
  13656.     MOVE.L    STText1Number-1(PC),A3
  13657.     MOVE.L    STText2Number-1(PC),A4
  13658.     MOVE.L    STText3Number-1(PC),A5
  13659.     MOVEQ    #0,D6
  13660. PLSTmarkloop
  13661.     MOVE.W    #'st',(A0)    ; Set lowercase 'st'
  13662.     MOVE.B    3(A0),D0
  13663.     CMP.B    #'a',D0
  13664.     BLO.S    pmlskp1
  13665.     SUB.B    #32,D0
  13666. pmlskp1    MOVE.B    D0,3(A0)
  13667.     MOVE.B    4(A0),D0
  13668.     CMP.B    #'a',D0
  13669.     BLO.S    pmlskp2
  13670.     SUB.B    #32,D0
  13671. pmlskp2    MOVE.B    D0,4(A0)
  13672.     MOVE.L    2(A0),D0    ; Get number ('-01:' etc)
  13673. PLSTchk1
  13674.     CMP.L    A3,D0
  13675.     BNE    PLSTchk2
  13676.     MOVE.W    #'ST',(A0)
  13677.     ADDQ.W    #1,D6
  13678.     BRA    PLSTmarknext
  13679.  
  13680. PLSTchk2
  13681.     CMP.L    A4,D0
  13682.     BNE    PLSTchk3
  13683.     MOVE.W    #'ST',(A0)
  13684.     ADDQ.W    #1,D6
  13685.     BRA    PLSTmarknext
  13686.  
  13687. PLSTchk3
  13688.     CMP.L    A5,D0
  13689.     BNE    PLSTmarknext
  13690.     MOVE.W    #'ST',(A0)
  13691.     ADDQ.W    #1,D6
  13692. PLSTmarknext
  13693.     ADD.L    #30,A0
  13694.     DBRA    D7,PLSTmarkloop
  13695.     MOVE.W    D6,PresetMarkTotal
  13696.     CLR.W    PLSTpos
  13697.     CLR.L    PLSTOffset
  13698.     RTS
  13699.  
  13700. PLSTMarkAll
  13701.     MOVE.W    #'ST',(A0)    ; Set uppercase 'ST'
  13702.     LEA    30(A0),A0
  13703.     DBRA    D7,PLSTMarkAll
  13704.     MOVE.W    PresetTotal(PC),PresetMarkTotal
  13705.     CLR.W    PLSTpos
  13706.     CLR.L    PLSTOffset
  13707.     RTS
  13708.  
  13709. NoPLST    CLR.W    PresetMarkTotal
  13710.     CLR.W    PLSTpos
  13711.     CLR.L    PLSTOffset
  13712.     RTS
  13713.  
  13714. RedrawPLST
  13715.     MOVE.W    PresetMarkTotal(PC),WordNumber
  13716.     MOVE.W    #189,TextOffset
  13717.     BSR    Print4DecDigits
  13718.     BSR    ShowDiskNames
  13719.     TST.L    PLSTmem
  13720.     BEQ    PLST_rts
  13721.     TST.L    MaxPLSTOffset
  13722.     BEQ    PLST_rts
  13723.  
  13724.     MOVE.L    PLSTOffset(PC),D6
  13725.     MOVE.L    PLSTmem(PC),A6
  13726.     MOVE.W    #976,A5 ; TextOffset
  13727.     LEA    PLSTOffset(PC),A4
  13728.     MOVEQ    #11,D7    ; Number of lines to print
  13729.     TST.L    D6
  13730.     BMI    EndOfPLST
  13731. dtplstloop
  13732.     CMP.W    #'ST',(A6,D6.L)    ; Check for 'ST'
  13733.     BNE    PLSTNext
  13734.     MOVE.L    D6,(A4)+
  13735.     MOVE.W    A5,TextOffset
  13736.     MOVE.W    #19,TextLength
  13737.     LEA    (A6,D6.L),A3
  13738.     ADDQ.L    #3,A3
  13739.     MOVE.L    A3,ShowTextPtr
  13740.     MOVEM.L    D0-D7/A0-A6,-(SP)
  13741.     BSR    SpaceShowText
  13742.     MOVEM.L    (SP)+,D0-D7/A0-A6
  13743.     MOVE.W    22(A6,D6.L),WordNumber
  13744.     MOVE.W    WordNumber,D0
  13745.     LSL.W    #1,D0
  13746.     MOVE.W    D0,WordNumber
  13747.     MOVEM.L    D0-D7/A0-A6,-(SP)
  13748.     BSR    PrintHexWord
  13749.     MOVEM.L    (SP)+,D0-D7/A0-A6
  13750.     ADD.L    #30,D6
  13751.     CMP.L    MaxPLSTOffset(PC),D6
  13752.     BHI    EndOfPLST
  13753.     ADD.W    #240,A5    ; Next Screen position
  13754.     DBRA    D7,dtplstloop
  13755.     RTS
  13756.  
  13757. PLSTNext
  13758.     ADD.L    #30,D6
  13759.     CMP.L    MaxPLSTOffset(PC),D6
  13760.     BHI    EndOfPLST
  13761.     BRA    dtplstloop
  13762.  
  13763. EndOfPLST
  13764.     MOVE.L    #$FFFFFFFF,(A4)+
  13765.     MOVE.W    A5,TextOffset
  13766.     MOVE.W    #23,TextLength
  13767.     MOVE.L    #EmptyLineText,ShowTextPtr
  13768.     MOVEM.L    D0-D7/A0-A6,-(SP)
  13769.     BSR    SpaceShowText
  13770.     MOVEM.L    (SP)+,D0-D7/A0-A6
  13771.     ADD.W    #240,A5
  13772.     DBRA    D7,EndOfPLST
  13773.     RTS
  13774.  
  13775. TypeInDisk1
  13776.     LEA    STText1Number(PC),A6
  13777.     MOVE.W    #156,LineCurX
  13778.     BRA    DoTypeInDisk
  13779.  
  13780. TypeInDisk2
  13781.     LEA    STText2Number(PC),A6
  13782.     MOVE.W    #204,LineCurX
  13783.     BRA    DoTypeInDisk
  13784.  
  13785. TypeInDisk3
  13786.     LEA    STText3Number(PC),A6
  13787.     MOVE.W    #252,LineCurX
  13788. DoTypeInDisk
  13789.     CLR.B    (A6)
  13790.     CLR.B    1(A6)
  13791.     JSR    StorePtrCol
  13792.     JSR    SetWaitPtrCol
  13793.     BSR    ShowDiskNames
  13794.     MOVE.W    #20,LineCurY
  13795.     BSR    UpdateLineCurPos
  13796.     BSR    GetHexKey
  13797.     TST.B    RawKeyCode
  13798.     BNE    ClearDiskNum
  13799.     BTST    #2,$DFF016
  13800.     BEQ    ClearDiskNum
  13801.     ADD.W    D1,D1
  13802.     LEA    FastHexTable+1(PC),A0
  13803.     MOVE.B    (A0,D1.W),(A6)
  13804.     ADDQ.W    #8,LineCurX
  13805.     BSR    ShowDiskNames
  13806.     BSR    UpdateLineCurPos
  13807.     BSR    GetHexKey
  13808.     TST.B    RawKeyCode
  13809.     BNE    ClearDiskNum
  13810.     BTST    #2,$DFF016
  13811.     BEQ    ClearDiskNum
  13812.     ADD.W    D1,D1
  13813.     LEA    FastHexTable+1(PC),A0
  13814.     MOVE.B    (A0,D1.W),1(A6)
  13815.     JSR    RestorePtrCol
  13816.     BSR    PLSTCheckNum
  13817.     BSR    RedrawPLST
  13818.     CLR.W    LineCurX
  13819.     MOVE.W    #270,LineCurY
  13820.     BRA    UpdateLineCurPos
  13821.  
  13822. ClearAllDisks
  13823.     BSR    DoClearDisks
  13824.     BSR    PLSTCheckNum
  13825.     BRA    RedrawPLST
  13826.  
  13827. DoClearDisks
  13828.     MOVEQ    #0,D0
  13829.     MOVE.B    D0,STText1Number
  13830.     MOVE.B    D0,STText1Number+1
  13831.     MOVE.B    D0,STText2Number
  13832.     MOVE.B    D0,STText2Number+1
  13833.     MOVE.B    D0,STText3Number
  13834.     MOVE.B    D0,STText3Number+1
  13835.     RTS
  13836.  
  13837. MountList
  13838.     JSR    StorePtrCol
  13839.     JSR    SetDiskPtrCol
  13840.     BSR    DoClearDisks
  13841.     MOVE.W    #1,MountFlag
  13842.     LEA    df0text(PC),A4
  13843.     BSR    DoMountList
  13844.     LEA    STText1(PC),A0
  13845.     BSR    CheckMountName
  13846.     LEA    df1text(PC),A4
  13847.     BSR    DoMountList
  13848.     LEA    STText2(PC),A0
  13849.     BSR    CheckMountName
  13850.     LEA    df2text(PC),A4
  13851.     BSR    DoMountList
  13852.     LEA    STText3(PC),A0
  13853.     BSR    CheckMountName
  13854.     CLR.W    MountFlag
  13855.     JSR    RestorePtrCol
  13856.     BRA    cdisknum2
  13857.  
  13858. DoMountList    
  13859.     CLR.L    FIB_Filename
  13860.     CLR.L    FIB_Filename+4
  13861.     CLR.L    FIB_Filename+8
  13862.     MOVE.L    DOSBase(PC),A6
  13863.     MOVE.L    A4,D1
  13864.     MOVEQ    #-2,D2
  13865.     JSR    LVOLock(A6)
  13866.     MOVE.L    D0,FileLock
  13867.     BEQ    MountError
  13868.     MOVE.L    FileLock(PC),D1
  13869.     MOVE.L    #FileInfoBlock,D2
  13870.     JSR    LVOExamine(A6)
  13871.     TST.L    D0
  13872.     BEQ    MountError
  13873.     MOVE.L    FileLock(PC),D1
  13874.     JSR    LVOUnLock(A6)
  13875. MountError
  13876.     MOVEQ    #-1,D0
  13877.     RTS
  13878.  
  13879. CheckMountName
  13880.     MOVE.W    FIB_Filename,D0
  13881.     BEQ    MountError
  13882.     MOVE.W    #'ST',D1    ; Check for ST
  13883.     AND.W    #$1F1F,D0
  13884.     AND.W    #$1F1F,D1
  13885.     CMP.W    D0,D1
  13886.     BNE    ClearDiskNum
  13887.     MOVE.B    FIB_Filename+3,D0
  13888.     LSL.W    #8,D0
  13889.     MOVE.B    FIB_Filename+4,D0
  13890.     CMP.W    #'00',D0
  13891.     BEQ    ClearDiskNum
  13892.     MOVE.B    D0,4(A0)    ; Put disk number into ST-xx
  13893.     LSR.W    #8,D0
  13894.     MOVE.B    D0,3(A0)
  13895.     MOVEQ    #0,D0
  13896.     RTS
  13897.  
  13898. ClearDiskNum
  13899.     CLR.B    RawKeyCode
  13900.     JSR    RestorePtrCol
  13901.     CLR.B    (A6)
  13902.     CLR.B    1(A6)
  13903.     CLR.W    LineCurX
  13904.     MOVE.W    #270,LineCurY
  13905.     BSR    UpdateLineCurPos
  13906. cdisknum2
  13907.     BSR    PLSTCheckNum
  13908.     BRA    RedrawPLST
  13909.  
  13910. df0text    dc.b 'DF0:',0,0
  13911. df1text    dc.b 'DF1:',0,0
  13912. df2text    dc.b 'DF2:',0,0
  13913.  
  13914. CheckPLSTGadgs
  13915.     MOVEM.W    MouseX2(PC),D0/D1
  13916.     CMP.W    #120,D0
  13917.     BLO    cplstend
  13918.     CMP.W    #23,D1
  13919.     BHS    PLSTPressed
  13920.     CMP.W    #12,D1
  13921.     BHS    PLSTLine2
  13922. PLSTLine1
  13923.     CMP.W    #268,D0
  13924.     BHS    ExitPLST
  13925.     CMP.W    #168,D0
  13926.     BHS    cplstend
  13927.     CMP.W    #120,D0
  13928.     BHS    ClearAllDisks
  13929.     RTS
  13930.  
  13931. PLSTLine2
  13932.     CMP.W    #268,D0
  13933.     BHS    MountList
  13934.     CMP.W    #218,D0
  13935.     BHS    TypeInDisk3
  13936.     CMP.W    #168,D0
  13937.     BHS    TypeInDisk2
  13938.     BRA    TypeInDisk1
  13939. cplstend
  13940.     RTS
  13941.  
  13942. ExitPLST
  13943.     JSR    WaitForButtonUp
  13944.     CLR.B    RawKeyCode
  13945.     JSR    ClearRightArea
  13946.     JMP    DisplayMainScreen
  13947.  
  13948. PLSTOneUp
  13949.     TST.W    PresetMarkTotal
  13950.     BEQ    Return2
  13951.     BTST    #6,$BFE001
  13952.     BEQ    PLST_rts
  13953.     MOVE.W    PLSTpos,D0
  13954.     MOVE.W    D0,D2
  13955.     SUBQ.W    #1,D0
  13956.     TST.W    ShiftKeyStatus
  13957.     BNE.S    pouski2
  13958.     BTST    #2,$DFF016
  13959.     BNE    pouskip
  13960. pouski2    SUB.W    #9,D0
  13961. pouskip    TST.W    D0
  13962.     BPL    DoPLSTUpDown
  13963.     CLR.W    D0
  13964.     BRA    DoPLSTUpDown
  13965.  
  13966. PLSTOneDown
  13967.     TST.W    PresetMarkTotal
  13968.     BEQ    Return2
  13969.     BTST    #6,$BFE001
  13970.     BEQ    PLST_rts
  13971.     MOVE.W    PLSTpos(PC),D0
  13972.     MOVE.W    D0,D2
  13973.     ADDQ.W    #1,D0
  13974.     TST.W    ShiftKeyStatus
  13975.     BNE.S    podski2
  13976.     BTST    #2,$DFF016
  13977.     BNE    podskip
  13978. podski2    ADD.W    #9,D0
  13979. podskip    MOVE.W    PresetMarkTotal(PC),D1
  13980.     SUB.W    #12,D1
  13981.     CMP.W    D0,D1
  13982.     BHS    DoPLSTUpDown
  13983.     MOVE.W    D1,D0
  13984. DoPLSTUpDown
  13985.     BSR    UpdateOffset
  13986.     BRA    RedrawPLST
  13987.  
  13988. UpdateOffset
  13989.     MOVE.W    PLSTpos(PC),D1
  13990.     MOVE.W    D0,PLSTpos
  13991.     CMP.W    D0,D1
  13992.     BEQ    Return2
  13993.     TST.W    D0
  13994.     BEQ    ZeroPLSTOffset
  13995.     SUBQ.W    #1,D0
  13996.     MOVE.L    PLSTmem(PC),A0
  13997.     MOVEQ    #0,D6
  13998. cpoloop    CMP.W    #'ST',(A0,D6.L)    ; Check for 'ST'
  13999.     BEQ    NextPLSTOffset
  14000.     ADD.L    #30,D6
  14001.     BRA    cpoloop
  14002. NextPLSTOffset
  14003.     ADD.L    #30,D6
  14004.     DBRA    D0,cpoloop
  14005.     MOVE.L    D6,PLSTOffset
  14006.     RTS
  14007.  
  14008. ZeroPLSTOffset
  14009.     CLR.L    PLSTOffset
  14010.     RTS
  14011.  
  14012. PLSTPressed
  14013.     CMP.W    #24,D1
  14014.     BLO    Return2
  14015.     CMP.W    #95,D1
  14016.     BHI    Return2
  14017.     SUB.W    #24,D1
  14018.     AND.L    #$0000FFFF,D1
  14019.     DIVU    #6,D1
  14020.     LSL.W    #2,D1
  14021.     LEA    PLSTOffset(PC),A0
  14022.     MOVE.L    (A0,D1.W),D1
  14023.     BMI    Return2
  14024.     DIVU    #30,D1
  14025.     ADDQ.W    #1,D1
  14026.     MOVE.W    D1,CurrentPreset
  14027.     JSR    WaitForButtonUp
  14028.     BRA    UsePreset
  14029.  
  14030. ;---- Preset Editor/PED ----
  14031.  
  14032. PresetEditor
  14033.     JSR    WaitForButtonUp
  14034.     MOVE.W    #4,CurrScreen
  14035.     ST     DisableAnalyzer
  14036.     ST    NoSampleInfo
  14037.     BSR    SwapPresEdScreen
  14038.     BEQ    pedexi2
  14039. PED_Refresh
  14040.     CLR.W    PED_Action
  14041.     MOVE.L    TextBplPtr(PC),A0
  14042.     MOVE.W    #1219,D0
  14043. pedloop    CLR.L    (A0)+
  14044.     DBRA    D0,pedloop
  14045.     JSR    SetNormalPtrCol
  14046.     JSR    ClearAnalyzerColors
  14047.     BSR    ShowPEDnumbers
  14048.     BRA    ShowPresetNames
  14049.  
  14050. SwapPresEdScreen
  14051.     MOVE.L    DecompMemPtr,D0
  14052.     BEQ    speds2
  14053.     MOVE.L    D0,A1
  14054.     BSR    speds3
  14055.     BRA    FreeDecompMem
  14056. speds2    LEA    PresetEdData,A0
  14057.     MOVE.L    #PresetEdSize,D0
  14058.     BSR    Decompact
  14059.     BEQ    Return2
  14060. speds3    LEA    BitplaneData,A0
  14061.     MOVEQ    #1,D2
  14062. spesloop1
  14063.     MOVE.W    #1219,D0
  14064. spesloop2
  14065.     MOVE.L    (A0),D1
  14066.     MOVE.L    (A1),(A0)+
  14067.     MOVE.L    D1,(A1)+
  14068.     DBRA    D0,spesloop2
  14069.     LEA    $14F0(A0),A0
  14070.     DBRA    D2,spesloop1
  14071.     MOVEQ    #-1,D0
  14072.     RTS
  14073.  
  14074. CheckPresEdGadgs
  14075.     MOVEM.W    MouseX2(PC),D0/D1
  14076.     CMP.W    #45,D1
  14077.     BHS    CheckPEDnames
  14078.     CLR.W    PED_Action
  14079.     JSR    SetNormalPtrCol
  14080.     CMP.W    #307,D0
  14081.     BHS    PED_GotoPLST
  14082. PED_Menu1
  14083.     CMP.W    #101,D0
  14084.     BHS    PED_Menu2
  14085.     CMP.W    #34,D1
  14086.     BHS    PED_DeleteDisk
  14087.     CMP.W    #23,D1
  14088.     BHS    PED_Delete
  14089.     CMP.W    #12,D1
  14090.     BHS    PED_Insert
  14091.     BRA    PED_AddPathGadg
  14092.  
  14093. PED_Menu2    
  14094.     CMP.W    #209,D0
  14095.     BHS    PED_Menu3
  14096.     CMP.W    #34,D1
  14097.     BHS    PED_ClearPLST
  14098.      CMP.W    #23,D1
  14099.     BHS    Return2
  14100.      CMP.W    #12,D1
  14101.     BHS    PED_Disk
  14102.     BRA    PED_EnterPath
  14103.  
  14104. PED_Menu3    
  14105.     CMP.W    #34,D1
  14106.     BHS    PED_Print
  14107.     CMP.W    #23,D1
  14108.     BHS    WritePLST
  14109.     CMP.W    #12,D1
  14110.     BHS.S    xLoadPLST
  14111.     BRA    PED_EnterPath
  14112.  
  14113. xLoadPLST
  14114.     BSR    LoadPLST
  14115.     MOVE.W    #1,PEDPos
  14116.     BRA    PED_Refresh
  14117.  
  14118. PED_GotoPLST
  14119.     BSR    PED_Exit
  14120.     BRA    PLST
  14121.  
  14122. PED_Exit
  14123.     JSR    WaitForButtonUp
  14124.     BSR    PLSTCheckNum
  14125.     BSR    SwapPresEdScreen
  14126.     MOVE.L    TextBplPtr(PC),A0
  14127.     MOVE.W    #1219,D0
  14128. pedeloop    CLR.L    (A0)+
  14129.     DBRA    D0,pedeloop
  14130.     CLR.B    RawKeyCode
  14131. pedexi2    JSR    ClearAnalyzerColors
  14132.     JMP    DisplayMainAll
  14133.  
  14134. PED_AddPathGadg
  14135.     TST.L    PLSTmem
  14136.     BNE    pedawok
  14137.     BSR    AllocPLST
  14138.     TST.L    PLSTmem
  14139.     BEQ    PLSTMemErr
  14140. pedawok    MOVE.L    DOSbase(PC),A6
  14141.     MOVE.L    #PEdDefaultPath,D1
  14142.     MOVEQ    #-2,D2
  14143.     JSR    LVOLock(A6)
  14144.     MOVE.L    D0,FileLock
  14145.     BEQ    UnlockReadPath
  14146.     JSR    SetDiskPtrCol
  14147.     LEA    AddingPathText(PC),A0
  14148.     BSR    ShowStatusText
  14149.     MOVE.L    DOSbase(PC),A6
  14150.     MOVE.L    FileLock(PC),D1
  14151.     MOVE.L    #FileInfoBlock,D2
  14152.     JSR    LVOExamine(A6)
  14153.     TST.L    D0
  14154.     BPL    UnlockReadPath
  14155.     TST.L    FIB_EntryType
  14156.     BPL    CheckPathDirName
  14157.     BSR    AddPreset
  14158.     BRA    IsPLSTfull
  14159.  
  14160. CheckPathDirName
  14161.     CMP.B    #'-',FIB_FileName+2
  14162.     BNE    IsPLSTfull
  14163.     MOVE.B    FIB_FileName+3,SndDiskNum0
  14164.     MOVE.B    FIB_FileName+4,SndDiskNum1
  14165.     BSR    ShowPEDnumbers
  14166. IsPLSTfull
  14167.     MOVE.W    PresetTotal(PC),D0
  14168.     CMP.W    MaxPLSTEntries,D0
  14169.     BLO    ReadPathNext
  14170.     BSR    PLSTisFull
  14171.     BRA    ReadPathEnd
  14172.  
  14173. ReadPathNext
  14174.     MOVE.L    DOSbase,A6
  14175.     MOVE.L    FileLock(PC),D1
  14176.     MOVE.L    #FileInfoBlock,D2
  14177.     JSR    LVOExNext(A6)
  14178.     TST.L    D0
  14179.     BPL    ReadPathEnd
  14180.     BTST    #2,$DFF016
  14181.     BEQ    ReadPathEnd
  14182.     TST.L    FIB_EntryType
  14183.     BPL    IsPLSTfull
  14184.     CMP.L    #'.inf',FIB_FileName
  14185.     BEQ    IsPLSTfull
  14186.     CMP.L    #'.inf',FIB_FileName+4
  14187.     BEQ    IsPLSTfull
  14188. ;    LEA    FIB_FileName,A0
  14189. ;    MOVEQ    #28,D0
  14190. ;repalop    CMP.B    #'.',(A0)+
  14191. ;    BEQ    CouldBeInfo
  14192. ;    DBRA    D0,repalop
  14193. rpnskip    CLR.W    PresetRepeat
  14194.     MOVE.W    #1,PresetReplen
  14195. ;    TST.B    IFFLoopFlag    ; name is ok, test for IFF
  14196.     BRA    rpnskp2
  14197. ;    LEA    PEDDefaultPath,A0
  14198.     JSR    CopyPath
  14199.     LEA    FIB_FileName,A0
  14200. rpncpfn    MOVE.B    (A0)+,(A1)+
  14201.     BNE.S    rpncpfn
  14202.     MOVE.L    #FileName,D1
  14203.     MOVE.L    #1005,D2
  14204.     MOVE.L    DOSbase(PC),A6
  14205.     JSR    LVOOpen(A6)
  14206.     MOVE.L    D0,FileHandle
  14207.     BEQ.S    rpnskp2
  14208.     MOVE.L    D0,D1
  14209.     LEA    chkiffbuffer(PC),A2
  14210.     CLR.L    (A2)
  14211.     MOVE.L    A2,D2
  14212.     MOVEQ    #12,D3
  14213.     JSR    LVORead(A6)
  14214.     CMP.L    #"FORM",(A2)
  14215.     BNE.S    rpnclse
  14216.     CMP.L    #"8SVX",8(A2)
  14217.     BNE.S    rpnclse
  14218. rpnvhdr    MOVE.L    FileHandle(PC),D1
  14219.     MOVE.L    A2,D2
  14220.     MOVEQ    #4,D3
  14221.     JSR    LVORead(A6)
  14222.     TST.L    D0
  14223.     BEQ.S    rpnclse
  14224.     CMP.L    #"VHDR",(A2)
  14225.     BNE.S    rpnvhdr
  14226.     MOVE.L    FileHandle(PC),D1
  14227.     MOVE.L    A2,D2
  14228.     MOVEQ    #12,D3
  14229.     JSR    LVORead(A6)
  14230.     MOVE.L    8(A2),D0
  14231.     BEQ.S    rpnclse
  14232.     LSR.W    #1,D0
  14233.     MOVE.W    D0,PresetReplen
  14234.     MOVE.L    4(A2),D0
  14235.     LSR.W    #1,D0
  14236.     MOVE.W    D0,PresetRepeat
  14237. rpnclse    MOVE.L    FileHandle(PC),D1
  14238.     JSR    LVOClose(A6)
  14239. rpnskp2    BSR    AddPreset
  14240.     BSR    ShowPEDnumbers
  14241.     BRA    IsPLSTfull
  14242.  
  14243. chkiffbuffer
  14244.     dc.l    0,0,0
  14245.  
  14246. CouldBeInfo
  14247.     CMP.B    #'i',(A0)+
  14248.     BNE    rpnskip
  14249.     CMP.B    #'n',(A0)+
  14250.     BNE    rpnskip
  14251.     CMP.B    #'f',(A0)+
  14252.     BNE    rpnskip
  14253.     CMP.B    #'o',(A0)+
  14254.     BNE    rpnskip
  14255.     CMP.B    #0,(A0)+
  14256.     BNE    rpnskip
  14257.     BRA    IsPLSTFull
  14258.  
  14259. ReadPathEnd
  14260.     MOVE.L    DOSbase(PC),A6
  14261.     MOVE.L    FileLock(PC),D1
  14262.     BEQ    rpeskip
  14263.     JSR    LVOUnLock(A6)
  14264. rpeskip    JSR    SetNormalPtrCol
  14265.     BSR    ShowPresetNames
  14266.     BRA    ShowAllRight
  14267.  
  14268. UnlockReadPath
  14269.     MOVE.L    DOSbase(PC),A6
  14270.     MOVE.L    FileLock(PC),D1
  14271.     BEQ    urpend
  14272.     JSR    LVOUnLock(A6)
  14273. urpend    JMP    SetErrorPtrCol
  14274.  
  14275. AddPreset
  14276.     LEA    PEdDefaultVol(PC),A0
  14277.     LEA    PresetName(PC),A1
  14278.     MOVEQ    #21,D0
  14279. .loop    CLR.B    (A1)+
  14280.     DBRA    D0,.loop
  14281.     LEA    PresetName(PC),A1
  14282.     MOVEQ    #5,D0    ; Disk ST-XX:
  14283. aploop    MOVE.B    (A0)+,(A1)+
  14284.     DBRA    D0,aploop
  14285.  
  14286.     LEA    FIB_FileName,A0
  14287.     MOVEQ    #14,D0    ; Name 16 letters.
  14288. aploop2    MOVE.B    (A0)+,D1
  14289.     BEQ    .skip
  14290.     MOVE.B    D1,(A1)+
  14291.     DBRA    D0,aploop2
  14292. .skip    CLR.B    (A1)
  14293.  
  14294.     MOVE.L    FIB_FileSize,D0
  14295.     CMP.L    #$FFFE,D0
  14296.     BLS.S    apskip2
  14297.     MOVE.W    #$FFFE,D0
  14298. apskip2    LSR.W    #1,D0
  14299.     MOVE.W    D0,PresetLength
  14300.     CLR.W    PresetFineTune
  14301.     LEA    PresetName(PC),A6
  14302.     BSR    PED_CheckAdd
  14303.     ADDQ.W    #1,PresetTotal
  14304.     ADD.L    #30,MaxPLSTOffset
  14305.     RTS
  14306.  
  14307. PED_Insert
  14308.     TST.L    PLSTmem
  14309.     BNE    pediwok
  14310.     BSR    AllocPLST
  14311.     TST.L    PLSTmem
  14312.     BEQ    PLSTMemErr
  14313. pediwok    MOVE.W    PresetTotal(PC),D0
  14314.     CMP.W    MaxPLSTEntries2,D0
  14315.     BHS    PLSTisFull
  14316.     LEA    InsertPsetText(PC),A0
  14317.     LEA    PresetName(PC),A1
  14318.     MOVEQ    #39,D0
  14319. pediloop
  14320.     MOVE.B    (A0)+,(A1)+
  14321.     DBRA    D0,pediloop
  14322. PossibleEdit
  14323.     JSR    StorePtrCol
  14324.     JSR    SetWaitPtrCol
  14325.     MOVE.L    TextBplPtr(PC),A0
  14326.     LEA    2320(A0),A0
  14327.     MOVEQ    #59,D0
  14328. pediloop2
  14329.     CLR.L    (A0)+
  14330.     DBRA    D0,pediloop2
  14331.     LEA    EnterDataText(PC),A0
  14332.     BSR    ShowStatusText
  14333.     MOVE.W    #63,LineCurY
  14334.     LEA    PresetName(PC),A6
  14335.     MOVEQ    #3,D7
  14336.     MOVE.B    #4,EnterTextFlag
  14337. ShowPsetText
  14338.     LEA    PresetName+3(PC),A0
  14339.     MOVEQ    #37,D0
  14340.     MOVE.W    #2321,D1
  14341.     BSR    ShowText3
  14342.     MOVE.W    D7,D0
  14343.     SUBQ.W    #3,D0
  14344.     ASL.W    #3,D0
  14345.     ADD.W    #12,D0
  14346.     MOVE.W    D0,LineCurX
  14347.     BSR    UpdateLineCurPos
  14348. pediwaitkey
  14349.     JSR    DoKeyBuffer
  14350.     MOVE.B    RawKeyCode(PC),D0
  14351.     BEQ    pediwaitkey
  14352.     CLR.B    RawKeyCode
  14353.     BTST    #7,D0
  14354.     BNE    pediwaitkey
  14355.     AND.W    #$FF,D0
  14356.     CMP.B    #69,D0
  14357.     BEQ    PED_ESCkey
  14358.     CMP.B    #65,D0
  14359.     BEQ    PED_BkspaceKey
  14360.     CMP.B    #68,D0
  14361.     BEQ    PED_ReturnKey
  14362.     CMP.B    #79,D0
  14363.     BEQ    PED_LeftArrowKey
  14364.     CMP.B    #78,D0
  14365.     BEQ    PED_RightArrowKey
  14366.     CMP.B    #64,D0
  14367.     BHI    pediwaitkey
  14368.     CMP.W    #40,D7
  14369.     BEQ    pediwaitkey
  14370.     CMP.W    #22,D7
  14371.     BEQ    pediwaitkey
  14372.     LEA    UnshiftedKeymap(PC),A0
  14373.     TST.W    ShiftKeyStatus
  14374.     BEQ    ShiftKeySkip
  14375.     LEA    ShiftedKeymap(PC),A0
  14376. ShiftKeySkip
  14377.     MOVE.B    0(A0,D0.W),D1
  14378.     BEQ    pediwaitkey
  14379.  
  14380.     CMP.W    #6,D7
  14381.     BLO.S    hexchk2
  14382.     CMP.W    #25,D7
  14383.     BLO    PED_PrintChar
  14384. hexchk2    CMP.B    #'0',D1
  14385.     BLO    pediwaitkey
  14386.     CMP.B    #'f',D1
  14387.     BHI    pediwaitkey
  14388.     CMP.B    #'9',D1
  14389.     BLS    PED_PrintChar
  14390.     CMP.B    #'a',D1
  14391.     BHS    PED_PrintChar
  14392.     BRA    pediwaitkey
  14393.  
  14394. PED_PrintChar
  14395.     MOVE.B    D1,(A6,D7.W)
  14396.     BRA    PED_RightArrowKey
  14397.  
  14398. PED_ReturnKey
  14399.     CMP.B    #' ',PsetNameText
  14400.     BEQ    PED_ESCkey
  14401.     LEA    PsetVolText(PC),A0
  14402.     LEA    fitutexttab+32(PC),A1
  14403.     MOVE.B    (A0)+,D1
  14404.     LSL.W    #8,D1
  14405.     MOVE.B    (A0),D1
  14406.     MOVEQ    #15,D0
  14407. vofloop    CMP.W    -(A1),D1
  14408.     BEQ.S    vofound
  14409.     DBRA    D0,vofloop
  14410.     MOVEQ    #0,D0
  14411. vofound    MOVE.W    D0,PresetFineTune
  14412.     LEA    PsetLenText(PC),A0
  14413.     BSR    HexToInteger
  14414.     LSR.W    #1,D0
  14415.     MOVE.W    D0,PresetLength
  14416.     LEA    PsetRepeatText(PC),A0
  14417.     BSR    HexToInteger
  14418.     LSR.W    #1,D0
  14419.     MOVE.W    D0,PresetRepeat
  14420.     LEA    PsetReplenText(PC),A0
  14421.     BSR    HexToInteger
  14422.     LSR.W    #1,D0
  14423.     MOVE.W    D0,PresetReplen
  14424.     BSR    PED_CheckAdd
  14425.     ADDQ.W    #1,PresetTotal
  14426. PED_ESCkey
  14427.     CLR.W    LineCurX
  14428.     MOVE.W    #270,LineCurY
  14429.     BSR    UpdateLineCurPos
  14430.     BSR    ShowPresetNames
  14431.     BSR    ShowPEDnumbers
  14432.     BSR    ShowAllRight
  14433.     CLR.B    EnterTextFlag
  14434.     JMP    RestorePtrCol
  14435.  
  14436. PED_BkspaceKey
  14437.     CMP.W    #23,D7
  14438.     BHS    pedbsend
  14439.     CMP.W    #6,D7
  14440.     BLS    pedbsend
  14441.     SUBQ.W    #1,D7
  14442.     MOVE.B    #' ',(A6,D7.W)
  14443. pedbsend
  14444.     BRA    ShowPsetText
  14445.  
  14446. PED_LeftArrowKey
  14447.     SUBQ.W    #1,D7
  14448.     CMP.W    #2,D7
  14449.     BLS    pedlakskip2
  14450.     CMP.W    #5,D7
  14451.     BEQ    pedlakskip
  14452.     CMP.W    #22,D7
  14453.     BEQ    pedlakskip
  14454.     CMP.W    #25,D7
  14455.     BEQ    pedlakskip
  14456.     CMP.W    #30,D7
  14457.     BEQ    pedlakskip
  14458.     CMP.W    #35,D7
  14459.     BEQ    pedlakskip
  14460.     BRA    ShowPsetText
  14461.  
  14462. pedlakskip
  14463.     SUBQ.W    #1,D7
  14464.     BRA    ShowPsetText
  14465.  
  14466. pedlakskip2
  14467.     MOVEQ    #3,D7
  14468.     BRA    ShowPsetText
  14469.  
  14470. PED_RightArrowKey
  14471.     ADDQ.W    #1,D7
  14472.     CMP.W    #5,D7
  14473.     BEQ    pedrakskip
  14474.     CMP.W    #22,D7
  14475.     BEQ    pedrakskip
  14476.     CMP.W    #25,D7
  14477.     BEQ    pedrakskip
  14478.     CMP.W    #30,D7
  14479.     BEQ    pedrakskip
  14480.     CMP.W    #35,D7
  14481.     BEQ    pedrakskip
  14482.     CMP.W    #40,D7
  14483.     BHS    pedrakskip2
  14484.     BRA    ShowPsetText
  14485.  
  14486. pedrakskip
  14487.     ADDQ.W    #1,D7
  14488.     BRA    ShowPsetText
  14489.  
  14490. pedrakskip2
  14491.     MOVEQ    #39,D7
  14492.     BRA    ShowPsetText
  14493.  
  14494. PED_CheckAdd
  14495.     MOVEQ    #23,D0
  14496. pedcaloop
  14497.     SUBQ.W    #1,D0
  14498.     CMP.B    #' ',0(A6,D0.W)
  14499.     BEQ    pedcaloop
  14500.     CLR.B    1(A6,D0.W)
  14501.     MOVE.L    PLSTmem(PC),A5
  14502.     LEA    30(A5),A5
  14503. pedccnextloop
  14504.     MOVEQ    #6,D0
  14505.     TST.B    6(A5)
  14506.     BEQ    PED_AddPreset
  14507. PED_ConvertLoop
  14508.     MOVE.B    0(A5,D0.W),D2
  14509.     BNE    PED_ConvertCase
  14510.     TST.B    0(A6,D0.W)
  14511.     BNE    PED_ConvertCase
  14512.     CLR.B    6(A5)
  14513.     SUBQ.W    #1,PresetTotal
  14514.     BRA    PED_AddPreset
  14515.  
  14516. PED_ConvertCase
  14517.     CMP.B    #'A',D2
  14518.     BLO    pedccskip
  14519.     CMP.B    #'Z',D2
  14520.     BHI    pedccskip
  14521.     ADD.B    #32,D2
  14522. pedccskip
  14523.     MOVE.B    0(A6,D0.W),D1
  14524.     CMP.B    #' ',D1
  14525.     BEQ    pedccskip3
  14526.     CMP.B    #'A',D1
  14527.     BLO    pedccskip2
  14528.     CMP.B    #'Z',D1
  14529.     BHI    pedccskip2
  14530.     ADD.B    #32,D1
  14531. pedccskip2
  14532.     CMP.B    D2,D1
  14533.     BEQ    pedccnext
  14534.     BHI    pedccskip3
  14535.     BRA    PED_AddPreset
  14536.  
  14537. pedccnext
  14538.     ADDQ.W    #1,D0
  14539.     CMP.W    #22,D0
  14540.     BNE    PED_ConvertLoop
  14541. pedccskip3
  14542.     LEA    30(A5),A5
  14543.     BRA    pedccnextloop
  14544.  
  14545. PED_AddPreset
  14546.     TST.B    6(A5)
  14547.     BEQ    pedapskip
  14548.     MOVE.L    PLSTmem(PC),A1
  14549.     MOVE.W    PresetTotal(PC),D0
  14550.     CMP.W    #1,D0
  14551.     BEQ    pedapskip
  14552.     MULU    #30,D0
  14553.     ADD.L    D0,A1
  14554.     LEA    30(A1),A1
  14555.     CLR.B    31(A1)
  14556. pedaploop
  14557.     MOVE.W    (A1),30(A1)
  14558.     SUBQ.L    #2,A1
  14559.     CMP.L    A1,A5
  14560.     BLS    pedaploop
  14561. pedapskip
  14562.     MOVEQ    #21,D0
  14563. pedaploop2
  14564.     MOVE.B    0(A6,D0.W),D1
  14565.     CMP.B    #'A',D1
  14566.     BLO    pedapskip2
  14567.     CMP.B    #'Z',D1
  14568.     BHI    pedapskip2
  14569.     ADD.B    #32,D1
  14570. pedapskip2
  14571.     CMP.B    #' ',D1
  14572.     BNE    pedapskip3
  14573.     MOVEQ    #0,D1
  14574. pedapskip3
  14575.     MOVE.B    D1,0(A5,D0.W)
  14576.     DBRA    D0,pedaploop2
  14577.     MOVE.W    PresetLength(PC),22(A5)
  14578.     MOVE.B    PresetFineTune+1(PC),24(A5)
  14579.     MOVE.B    #$40,25(A5)
  14580.     MOVE.W    PresetRepeat(PC),26(A5)
  14581.     MOVE.W    PresetReplen(PC),28(A5)
  14582.     RTS
  14583.  
  14584. HexToInteger
  14585.     MOVEQ    #0,D0
  14586.     BSR    Single_hti
  14587.     LSL.W    #8,D1
  14588.     LSL.W    #4,D1
  14589.     OR.W    D1,D0
  14590.     BSR    Single_hti
  14591.     LSL.W    #8,D1
  14592.     OR.W    D1,D0
  14593. HexToInteger2
  14594.     BSR    Single_hti
  14595.     LSL.W    #4,D1
  14596.     OR.W    D1,D0
  14597.     BSR    Single_hti
  14598.     OR.W    D1,D0
  14599.     RTS
  14600.  
  14601. Single_hti
  14602.     MOVEQ    #0,D1
  14603.     MOVE.B    (A0)+,D1
  14604.     CMP.B    #$60,D1
  14605.     BLO    shtiskip
  14606.     SUB.B    #$20,D1
  14607. shtiskip
  14608.     SUB.B    #$30,D1
  14609.     CMP.B    #9,D1
  14610.     BLS    Return2
  14611.     SUBQ.B    #7,D1
  14612.     RTS
  14613.  
  14614. PED_Delete
  14615.     JSR    SetDeletePtrCol
  14616.     MOVE.W    #1,PED_Action
  14617.     LEA    SelectEntryText(PC),A0
  14618.     BRA    ShowStatusText
  14619.  
  14620. PED_ClearPLST
  14621.     LEA    ClearPLSTText,A0
  14622.     JSR    AreYouSure
  14623.     BNE    Return2
  14624.     BSR    FreePLST
  14625.     BRA    PED_Refresh
  14626.  
  14627. ClearPLSTText    dc.b 'clear plst ?',0,0
  14628.  
  14629. PED_Print
  14630.     LEA    PrintPLSTText,A0
  14631.     JSR    AreYouSure
  14632.     BNE    Return2
  14633.     JSR    StorePtrCol
  14634.     MOVE.L    DOSbase(PC),A6
  14635.     MOVE.L    #PrintPath,D1
  14636.     MOVE.L    #1006,D2
  14637.     JSR    LVOOpen(A6)
  14638.     MOVE.L    D0,FileHandle
  14639.     BEQ    CantOpenFile
  14640.     JSR    SetDiskPtrCol
  14641.     MOVE.L    D0,D1
  14642.     MOVE.L    #PsetPLSTtext,D2
  14643.     MOVEQ    #56,D3
  14644.     JSR    LVOWrite(A6)
  14645.     LEA    PrintingPLSTText(PC),A0
  14646.     BSR    ShowStatusText
  14647.     CLR.W    PsetNumTemp
  14648. pedpmainloop    
  14649.     MOVE.W    PsetNumTemp(PC),D0
  14650.     LEA    PsetPrtNumText(PC),A0
  14651.     BSR    IntToDecASCII
  14652.     MOVE.L    PLSTmem(PC),A0
  14653.     MOVE.W    PsetNumTemp(PC),D0
  14654.     MULU    #30,D0
  14655.     ADD.L    D0,A0
  14656.     MOVE.L    A0,PsetPtrTemp
  14657.     LEA    PsetPrtNameText(PC),A1
  14658.     MOVE.L    A1,A2
  14659.     MOVEQ    #19,D1
  14660. FillSpaceLoop
  14661.     MOVE.B    #' ',(A2)+
  14662.     DBRA    D1,FillSpaceLoop
  14663.     MOVEQ    #19,D1
  14664. pedploop
  14665.     TST.B    (A0)
  14666.     BEQ    pedpskip
  14667.     MOVE.B    (A0)+,(A1)+
  14668.     DBRA    D1,pedploop
  14669. pedpskip
  14670.     MOVE.L    PsetPtrTemp(PC),A1
  14671.     MOVE.W    22(A1),D0
  14672.     LEA    PsetPrtLenText(PC),A0
  14673.     BSR    IntToHexASCII
  14674.     MOVE.L    PsetPtrTemp(PC),A1
  14675.     MOVE.W    26(A1),D0
  14676.     LEA    PsetPrtRepeatText(PC),A0
  14677.     BSR    IntToHexASCII
  14678.     MOVE.L    PsetPtrTemp(PC),A1
  14679.     MOVE.W    28(A1),D0
  14680.     ADD.W    D0,D0
  14681.     LEA    PsetPrtRepLenText(PC),A0
  14682.     BSR    IntToHexASCII
  14683.     MOVE.L    FileHandle(PC),D1
  14684.     MOVE.L    #PsetPrtNumText,D2
  14685.     MOVEQ    #53,D3
  14686.     JSR    LVOWrite(A6)
  14687.     BTST    #2,$DFF016
  14688.     BEQ    AbortPLSTPrint
  14689.     ADDQ.W    #1,PsetNumTemp
  14690.     MOVE.W    PsetNumTemp(PC),D0
  14691.     CMP.W    PresetTotal(PC),D0
  14692.     BNE    pedpmainloop
  14693.     BRA    pedpend
  14694.  
  14695. AbortPLSTPrint
  14696.     LEA    OprAbortedText(PC),A0
  14697.     BSR    ShowStatusText
  14698.     JSR    SetErrorPtrCol
  14699. pedpend    MOVE.L    FileHandle(PC),D1
  14700.     JSR    LVOClose(A6)
  14701.     BSR    ShowAllRight
  14702.     JMP    RestorePtrCol
  14703.  
  14704. IntToDecASCII
  14705.     MOVEQ    #3,D3
  14706.     MOVE.L    #1000,D2
  14707. itdloop    EXT.L    D0
  14708.     DIVU    D2,D0
  14709.     ADD.B    #'0',D0
  14710.     MOVE.B    D0,(A0)+
  14711.     DIVU    #10,D2
  14712.     SWAP    D0
  14713.     DBRA    D3,itdloop
  14714.     RTS
  14715.  
  14716. IntToHex2
  14717.     MOVEQ    #1,D2
  14718.     BRA    ithaloop
  14719.  
  14720. IntToHexASCII
  14721.     MOVEQ    #3,D2
  14722. ithaloop
  14723.     MOVE.W    D0,D1
  14724.     AND.B    #15,D1
  14725.     CMP.B    #10,D1
  14726.     BLO    ithaskip
  14727.     ADDQ.B    #7,D1
  14728. ithaskip
  14729.     ADD.B    #'0',D1
  14730.     MOVE.B    D1,-(A0)
  14731.     ROR.W    #4,D0
  14732.     DBRA    D2,ithaloop
  14733.     RTS
  14734.  
  14735. WritePLST
  14736.     LEA    SavePLSTText,A0
  14737.     JSR    AreYouSure
  14738.     BNE    Return2
  14739.     JSR    StorePtrCol
  14740.     JSR    SetDiskPtrCol
  14741.     LEA    SavingPLSTText(PC),A0
  14742.     BSR    ShowStatusText
  14743.     LEA    PTPath,A0
  14744.     JSR    CopyPath
  14745.     LEA    PLSTName(PC),A0
  14746.     MOVEQ    #4,D0
  14747. dsploop    MOVE.B    (A0)+,(A1)+
  14748.     DBRA    D0,dsploop
  14749.     MOVE.L    #FileName,D1
  14750.     MOVE.L    #1006,D2
  14751.     MOVE.L    DOSbase(PC),A6
  14752.     JSR    LVOOpen(A6)
  14753.     MOVE.L    D0,D7
  14754.     BEQ    CantOpenFile
  14755.     MOVE.L    D0,D1
  14756.     MOVE.L    PLSTmem(PC),D2
  14757.     MOVE.W    PresetTotal(PC),D3
  14758.     MULU    #30,D3
  14759.     JSR    LVOWrite(A6)
  14760.     MOVE.L    D7,D1
  14761.     JSR    LVOClose(A6)
  14762.     BSR    ShowAllRight
  14763.     JMP    RestorePtrCol
  14764.  
  14765. CheckPEDnames
  14766.     CMP.W    #307,D0
  14767.     BLO    PED_PsetHit
  14768.     CLR.W    PED_Action
  14769.     JSR    SetNormalPtrCol
  14770.     CMP.W    #122,D1
  14771.     BHS    Return2
  14772.     CMP.W    #111,D1
  14773.     BHS    PED_Bottom    
  14774.     CMP.W    #100,D1
  14775.     BHS.S    PED_OneDown
  14776.     CMP.W    #67,D1
  14777.     BHS    PED_Exit
  14778.     CMP.W    #56,D1
  14779.     BHS.S    PED_OneUp
  14780.     BRA.S    PED_Top
  14781.  
  14782. PED_OneUp    
  14783.     SUBQ.W    #1,PEDpos
  14784.     TST.W    ShiftKeyStatus
  14785.     BNE.S    poup2
  14786.     BTST    #2,$DFF016
  14787.     BNE.S    pedouskip
  14788. poup2    SUBQ.W    #7,PEDpos
  14789. pedouskip    
  14790.     CMP.W    #1,PEDpos
  14791.     BGE    ShowPresetNames
  14792. PED_Top    MOVE.W    #1,PEDpos
  14793.     BRA    ShowPresetNames
  14794.  
  14795. PED_OneDown    
  14796.     CMP.W    #9,PresetTotal
  14797.     BLO    ShowPresetNames
  14798.     ADDQ.W    #1,PEDpos
  14799.     TST.W    ShiftKeyStatus
  14800.     BNE.S    podn2
  14801.     BTST    #2,$DFF016
  14802.     BNE.S    pedodskip
  14803. podn2    ADDQ.W    #7,PEDpos
  14804. pedodskip    
  14805.     MOVE.W    PresetTotal,D0
  14806.     SUB.W    #10,D0
  14807.     CMP.W    PEDpos,D0
  14808.     BHS    ShowPresetNames
  14809. pedodsx    MOVE.W    D0,PEDpos
  14810.     BRA    ShowPresetNames
  14811.  
  14812. PED_Bottom
  14813.     MOVE.W    PresetTotal(PC),D0
  14814.     SUB.W    #11,D0
  14815.     BMI.S    PED_Top    
  14816.     ADDQ.W    #1,D0
  14817.     BRA.S    pedodsx
  14818.  
  14819. ShowPresetNames
  14820.     MOVE.W    #2321,D6
  14821.     MOVEQ    #9,D7
  14822.     MOVE.L    PLSTmem(PC),D0
  14823.     BEQ    Return2
  14824.     MOVE.L    D0,A5
  14825.     MOVE.W    PEDpos(PC),D0
  14826.     MULU    #30,D0
  14827.     ADD.L    D0,A5
  14828. spndploop
  14829.     TST.B    (A5)
  14830.     BEQ    Return2
  14831.     LEA    PresetNameText,A1
  14832.     MOVEQ    #21,D0
  14833. spnloop    MOVE.B    #' ',(A1)+
  14834.     DBRA    D0,spnloop
  14835.     MOVE.L    A5,A0
  14836.     ADDQ.L    #3,A0
  14837.     LEA    -22(A1),A1
  14838. spnloop2
  14839.     MOVE.B    (A0)+,D0
  14840.     BEQ.S    DisplayPreset
  14841.     MOVE.B    D0,(A1)+
  14842.     BRA.S    spnloop2
  14843.  
  14844. fitutexttab
  14845.     dc.b " 0+1+2+3+4+5+6+7-8-7-6-5-4-3-2-1"
  14846.  
  14847. DisplayPreset
  14848.     MOVEQ    #19,D0
  14849.     LEA    PresetNameText,A0
  14850.     MOVE.W    D6,D1
  14851.     BSR    ShowText3
  14852.     ADD.W    #20,D6
  14853.     MOVE.W    D6,TextOffset
  14854.     MOVEQ    #0,D0
  14855.     MOVE.B    24(A5),D0
  14856.     AND.B    #$0F,D0
  14857.     ADD.W    D0,D0
  14858.     LEA    fitutexttab(PC,D0.W),A0
  14859.     MOVE.W    #2,TextLength
  14860.     BSR    ShowText2
  14861.     MOVE.W    22(A5),D0
  14862.     ADD.W    D0,D0
  14863.     MOVE.W    D0,WordNumber
  14864.     ADDQ.W    #1,TextOffset
  14865.     BSR    PrintHexWord
  14866.     MOVE.W    26(A5),D0
  14867.     ADD.W    D0,D0
  14868.     MOVE.W    D0,WordNumber
  14869.     ADDQ.W    #1,TextOffset
  14870.     BSR    PrintHexWord
  14871.     MOVE.W    28(A5),D0
  14872.     ADD.W    D0,D0
  14873.     MOVE.W    D0,WordNumber
  14874.     ADDQ.W    #1,TextOffset
  14875.     BSR    PrintHexWord
  14876.     ADD.W    #220,D6   ; 218
  14877.     LEA    30(A5),A5
  14878.     DBRA    D7,spndploop
  14879.     RTS
  14880.  
  14881. PED_EnterPath
  14882.     JSR    StorePtrCol
  14883.     JSR    SetWaitPtrCol
  14884.     CLR.L    EditMode
  14885.     LEA    PEdDefaultPath(PC),A6
  14886.     BSR    UpdateLineCurPos
  14887.     MOVE.L    A6,TextEndPtr
  14888.     MOVE.L    A6,ShowTextPtr
  14889.     ADD.L    #31,TextEndPtr
  14890.     MOVE.W    #20,TextLength
  14891.     MOVE.L    #178,A4
  14892.     BSR    GetTextLine
  14893.     CLR.L    TextEndPtr
  14894.     JMP    RestorePtrCol
  14895.  
  14896. PED_Disk
  14897.     JSR    StorePtrCol
  14898.     JSR    SetWaitPtrCol
  14899.     CLR.L    EditMode
  14900.     CLR.B    SndDiskNum0
  14901.     CLR.B    SndDiskNum1
  14902.     LEA    SndDiskNum0(PC),A6
  14903.     MOVE.L    A6,TextEndPtr
  14904.     MOVE.L    A6,ShowTextPtr
  14905.     ADDQ.L    #2,TextEndPtr
  14906.     MOVE.W    #2,TextLength
  14907.     MOVE.L    #621,A4
  14908.     MOVE.B    #3,EnterTextFlag
  14909.     BSR    GetTextLine
  14910.     LEA    SndDiskNum0(PC),A6
  14911.     MOVE.B    #':',2(A6)
  14912.     CLR.B    EnterTextFlag
  14913.     CLR.L    TextEndPtr
  14914.     JMP    RestorePtrCol
  14915.  
  14916. ShowPEDnumbers
  14917.     MOVE.W    PresetTotal,WordNumber
  14918.     MOVE.W    #1061,TextOffset
  14919.     BSR    Print4DecDigits
  14920.     LEA    PEdDefaultPath,A0
  14921.     MOVE.W    #178,D1
  14922.     MOVEQ    #20,D0
  14923.     BSR    ShowText3
  14924.     LEA    PEdDefaultVol,A0
  14925.     MOVE.W    #618,D1
  14926.     MOVEQ    #6,D0
  14927.     BRA    ShowText3
  14928.  
  14929. PED_PsetHit
  14930.     CMP.W    #1,PresetTotal
  14931.     BEQ.S    pedphend
  14932.     MOVE.W    MouseY2(PC),D0
  14933.     CMP.W    #59,D0
  14934.     BLO.S    pedphend
  14935.     CMP.W    #119,D0
  14936.     BHS.S    pedphend
  14937.     SUB.W    #59,D0
  14938.     DIVU    #6,D0
  14939.     MOVE.L    D0,D1
  14940.     SWAP    D1
  14941.     CMP.W    #5,D1
  14942.     BEQ.S    pedphend
  14943.     MOVE.W    D0,D2
  14944.     ADD.W    PEDpos(PC),D2
  14945.     CMP.W    PresetTotal(PC),D2
  14946.     BHI.S    pedphend
  14947.     MULU    #30,D0
  14948.     MOVE.L    PLSTmem(PC),A5
  14949.     ADD.L    D0,A5
  14950.     MOVE.W    PEDpos(PC),D0
  14951.     MULU    #30,D0
  14952.     ADD.L    D0,A5
  14953.     TST.W    PED_Action
  14954.     BEQ.S    PED_CopyName
  14955.     CMP.W    #1,PED_Action
  14956.     BEQ    PED_DoDelete
  14957. pedphend
  14958.     RTS
  14959.  
  14960. PED_CopyName
  14961.     LEA    PresetName(PC),A0
  14962.     MOVEQ    #21,D0
  14963. pedcnloop
  14964.     MOVE.B    (A5)+,D1
  14965.     BNE    pedcnskip
  14966.     MOVE.B    #' ',D1
  14967. pedcnskip
  14968.     MOVE.B    D1,(A0)+
  14969.     DBRA    D0,pedcnloop
  14970.     MOVEQ    #0,D0
  14971.     MOVE.B    2(A5),D0
  14972.     AND.B    #$0F,D0
  14973.     ADD.W    D0,D0
  14974.     LEA    fitutexttab(PC),A1
  14975.     LEA    (A1,D0.W),A1
  14976.     LEA    PsetVolText(PC),A0
  14977.     MOVE.B    #' ',-1(A0)
  14978.     MOVE.B    (A1)+,(A0)+
  14979.     MOVE.B    (A1),(A0)
  14980.     MOVE.W    (A5),D0
  14981.     ADD.W    D0,D0
  14982.     LEA    6(A0),A0
  14983.     BSR    IntToHexASCII
  14984.     MOVE.W    4(A5),D0
  14985.     ADD.W    D0,D0
  14986.     LEA    9(A0),A0
  14987.     BSR    IntToHexASCII
  14988.     LEA    9(A0),A0
  14989.     MOVE.W    6(A5),D0
  14990.     ADD.W    D0,D0
  14991.     BSR    IntToHexASCII
  14992.     BRA    PossibleEdit
  14993.  
  14994. PED_DoDelete
  14995.     CLR.W    PED_Action
  14996.     LEA    DeletePresetText,A0
  14997.     JSR    AreYouSure
  14998.     BNE    Return2
  14999.     MOVE.L    PLSTmem(PC),A1
  15000.     MOVE.W    PresetTotal(PC),D0
  15001.     MULU    #30,D0
  15002.     ADD.L    D0,A1
  15003. pedddloop
  15004.     MOVE.W    30(A5),(A5)
  15005.     ADDQ.L    #2,A5
  15006.     CMP.L    A5,A1
  15007.     BHI.S    pedddloop
  15008.     CLR.B    (A5)
  15009.     SUBQ.W    #1,PresetTotal
  15010.     SUB.L    #30,MaxPLSTOffset
  15011.     MOVE.W    PEDpos(PC),D0
  15012.     ADD.W    #9,D0
  15013.     CMP.W    PresetTotal(PC),D0
  15014.     BHI.S    pedddskip
  15015.     SUBQ.W    #1,PEDpos
  15016. pedddskip    
  15017.     BSR    ShowPEDnumbers
  15018.     BSR    ShowPresetNames
  15019.     JSR    SetNormalPtrCol
  15020.     JMP    StorePtrCol
  15021.  
  15022. sepc    JMP    SetErrorPtrCol
  15023.  
  15024. PLSTisFull
  15025.     LEA    PLSTFullText(PC),A0
  15026.     BSR    ShowStatusText
  15027.     JMP    SetErrorPtrCol
  15028.  
  15029. PED_DeleteDisk
  15030.     LEA    DelDiskText(PC),A0
  15031.     MOVE.B    snddisknum0(PC),10(A0)
  15032.     MOVE.B    snddisknum1(PC),11(A0)
  15033.     JSR    AreYouSure
  15034.     BNE    Return2
  15035.     JSR    StorePtrCol
  15036.     JSR    SetWaitPtrCol
  15037.     MOVE.L    PLSTmem(PC),A0
  15038.     MOVE.L    A0,A1
  15039.     MOVE.W    PresetTotal(PC),D0
  15040.     MULU    #30,D0
  15041.     ADD.L    D0,A1
  15042.     MOVE.L    snddisknum0-1(PC),D1
  15043.     MOVE.L    #$FF5F5FFF,D2
  15044.     AND.L    D2,D1
  15045. peddslo    MOVE.L    2(A0),D0
  15046.     AND.L    D2,D0
  15047.     CMP.L    D1,D0
  15048.     BNE.S    peddsno
  15049.     MOVE.L    A0,A2
  15050. peddslp    MOVE.W    30(A0),(A0)+
  15051.     CMP.L    A1,A0
  15052.     BLO.S    peddslp
  15053.     SUBQ.W    #1,PresetTotal
  15054.     SUB.L    #30,MaxPLSTOffset
  15055.     MOVE.L    A2,A0
  15056.     BRA.S    peddsn1
  15057. peddsno    LEA    30(A0),A0
  15058. peddsn1    CMP.L    A1,A0
  15059.     BLO.S    peddslo
  15060.     MOVE.W    #1,PEDpos
  15061.     BSR    ShowPEDnumbers
  15062.     BSR    ShowPresetNames
  15063.     JMP    RestorePtrCol
  15064.  
  15065. DelDiskText    dc.b "Delete ST-.. ?",0,0
  15066.  
  15067. ;************  MIDI Routines  ************
  15068.  
  15069. *  Apollon MIDI Routines V0.2               *
  15070. *  V0.2 04/07-1991 First version            *
  15071.  
  15072. _RVOAllocMiscResource =  -6
  15073. _RVOFreeMiscResource  = -12
  15074.  
  15075. OpenMIDI
  15076.     TST.L    MIDIinBuffer
  15077.     BNE.S    omidisk
  15078.     MOVE.L    #256,D0
  15079.     MOVE.L    #MEMF_PUBLIC!MEMF_CLEAR,D1
  15080.     MOVE.L    4.W,A6
  15081.     JSR    LVOAllocMem(A6)
  15082.     MOVE.L    D0,MIDIinBuffer
  15083.     BEQ    Return2
  15084. omidisk    CLR.B    MIDIinTo
  15085.     CLR.B    MIDIinFrom
  15086.  
  15087.     BSR.S    .GetSer2        ;got the port?
  15088.     BEQ.S    .end            ;yes
  15089.     MOVE.L    4.W,A6            ;no..try to flush serial.device:
  15090.     JSR    LVOForbid(A6)
  15091.     LEA    DeviceList(A6),A0    ;ExecBase->DeviceList
  15092.     LEA    SerDevName(PC),a1    ;"serial.device"
  15093.     JSR    LVOFindName(A6)
  15094.     TST.L    D0
  15095.     BEQ.S    .notfnd            ;no serial.device!!
  15096.     MOVE.L    D0,A1
  15097.     JSR    LVORemDevice(A6)
  15098. .notfnd    JSR    LVOPermit(A6)
  15099.     BSR.S    .GetSer2        ;now try it again...
  15100. .end    RTS
  15101.  
  15102. .GetSer2
  15103.     MOVE.L    4.W,A6
  15104.     MOVEQ    #0,D0
  15105.     LEA    MiscResName(PC),a1
  15106.     JSR    LVOOpenResource(A6)
  15107.     MOVE.L    D0,MiscResBase
  15108.     BEQ    .gs_err
  15109.     MOVE.L    D0,A6
  15110.     LEA    rb_ProgName,A1
  15111.     MOVEQ    #0,D0        ;serial port
  15112.     JSR    _RVOAllocMiscResource(A6)
  15113.     TST.L    D0
  15114.     BNE.S    .gs_err
  15115.     ST.B    SerPortAlloc
  15116.     CLR.W    PrevBits
  15117.     MOVE.W    $DFF01C,D0
  15118.     BTST    #0,D0
  15119.     SNE.B    PrevBits
  15120.     BTST    #11,D0
  15121.     SNE.B    PrevBits+1
  15122.     MOVEQ    #0,D0        ;TBE
  15123.     LEA    MIDIOutInterrupt(PC),A1
  15124.     MOVE.L    4.W,A6
  15125.     JSR    LVOSetIntVector(A6)
  15126.     MOVE.L    D0,PrevTBE
  15127.     MOVEQ    #11,D0        ;RBF
  15128.     LEA    MIDIInInterrupt(pc),A1
  15129.     JSR    LVOSetIntVector(A6)
  15130.     MOVE.L    D0,PrevRBF
  15131.     MOVE.W    #114,$DFF032    ;set baud rate 114/31250 (SERPER)
  15132.     MOVE.W    #$8801,$DFF09A    ;RBF & TBE on!!
  15133.  
  15134.     MOVE.W    #30000,D0
  15135. .lolo    MOVE.W    #$0F0,$DFF180
  15136.     DBRA    D0,.lolo
  15137.     MOVEQ    #0,D0
  15138.     RTS
  15139.  
  15140. .gs_err    MOVE.W    #30000,D0
  15141. .lplp    MOVE.W    #$F00,$DFF180
  15142.     DBRA    D0,.lplp
  15143.     MOVEQ    #-1,D0
  15144.     RTS
  15145.  
  15146.  
  15147. ;----- Close MIDI and release serial port -----
  15148.  
  15149. CloseMIDI
  15150.     MOVE.L    MIDIinBuffer(PC),D0
  15151.     BEQ.S    clmskip
  15152.     MOVE.L    D0,A1
  15153.     MOVE.L    #256,D0
  15154.     MOVE.L    4.W,A6
  15155.     JSR    LVOFreeMem(A6)
  15156.     CLR.L    MIDIinBuffer
  15157. clmskip
  15158.     TST.L    MiscResBase
  15159.     BEQ.S    .fs_end
  15160.     TST.B    SerPortAlloc
  15161.     BEQ.S    .fs_end
  15162.     MOVE.W    #$0801,$dff09a    ;disable RBF & TBE
  15163.     MOVE.L    PrevTBE(PC),a1
  15164.     MOVEQ    #0,D0
  15165.     MOVE.L    4.W,A6
  15166.     JSR    LVOSetIntVector(A6)
  15167.     MOVE.L    PrevRBF(PC),a1
  15168.     MOVEQ    #11,D0
  15169.     JSR    LVOSetIntVector(A6)
  15170.     MOVE.W    #$8000,D0
  15171.     TST.B    PrevBits
  15172.     BEQ.S    .fs1
  15173.     BSET    #0,D0
  15174. .fs1    TST.B    PrevBits+1
  15175.     BEQ.S    .fs2
  15176.     BSET    #11,D0
  15177. .fs2    MOVE.W    D0,$DFF09A    ;set RBF & TBE to their prev. values
  15178.     MOVE.L    MiscResBase(PC),A6
  15179.     MOVEQ    #0,D0        ;serial port
  15180.     JSR    _RVOFreeMiscResource(A6)
  15181.     CLR.B    SerPortAlloc
  15182.     CLR.B    lastcmdbyte
  15183. .fs_end    RTS
  15184.  
  15185. mintflag dc.w 0
  15186.  
  15187.  
  15188. ;----- Every time we receive a MIDI byte -----
  15189.  
  15190. MIDIInIntHandler
  15191.     MOVE.W    $DFF018,D0 ; read from serdatr
  15192.     MOVE.W    #$0800,$DFF09C ;intreq
  15193.  
  15194.     MOVE.W    #$F00,$DFF180
  15195.  
  15196.     MOVEM.L    D1-D2,-(SP)
  15197. gmiskip    MOVEQ    #0,D1
  15198.     MOVE.B    4(A1),D1 ; in to
  15199.     MOVE.L    D1,D2
  15200.     ADDQ.B    #1,D2
  15201.     CMP.B    5(A1),D2 ; in from
  15202.     BEQ    gmiexit    ; Buffer overflow
  15203.     MOVE.L    (A1),A0 ; midi in buffer
  15204.     MOVE.B    D0,(A0,D1.W)
  15205.     MOVE.B    D2,4(A1); MIDIinTo
  15206. gmiexit    MOVEM.L    (SP)+,D1-D2
  15207.     RTS
  15208.  
  15209.  
  15210. ;----- MIDI Transmit Buffer Empty Interrupt (Output) -----
  15211.  
  15212. MIDIOutIntHandler
  15213.     MOVE.W    #$4000,intena(A0)    ;disable int.
  15214.     ADDQ.B    #1,IDNestCnt(A6)    ;turn off multitasking
  15215.     MOVE.W    #1,intreq(A0)        ;clear intreq bit
  15216.     MOVE.B    bytesinbuff(PC),D0
  15217.     BEQ.S    exsih            ;buffer empty
  15218.     MOVE.L    4(A1),A5        ;get buffer read pointer
  15219.     MOVE.W    #$100,D1        ;Stop bit
  15220.     MOVE.B    (A5),D1            ;get byte
  15221.     MOVE.W    D1,$030(A0)        ;and push it out!!
  15222.     ADDQ.L    #1,A5            ;add 1
  15223.     CMP.L    A1,A5            ;shall we reset ptr??
  15224.     BNE.S    nbufptr            ;not yet..
  15225.     LEA    sendbuffer(PC),A5
  15226. nbufptr    SUBQ.B    #1,D0            ;one less bytes in buffer
  15227.     MOVE.B    D0,bytesinbuff        ;remember it
  15228.     MOVE.L    A5,4(A1)        ;push new read pointer back
  15229. exsih    SUBQ.B    #1,IDNestCnt(A6)    ;multitasking back on
  15230.     BGE.S    exsih0
  15231.     MOVE.W    #$C000,intena(A0)
  15232. exsih0    RTS
  15233.  
  15234. ;----- Send data to MIDI Out or to output buffer -----
  15235. ; A0=ptr to data, D0=length
  15236.  
  15237. AddMIDIData
  15238.     TST.B    SerPortAlloc
  15239.     BEQ.S    retamd
  15240.     MOVE.L    A2,-(SP)
  15241.     MOVE.L    4.W,A6
  15242.     MOVE.W    #$4000,$DFF09A    ;Disable interrupts
  15243.     ADDQ.B    #1,IDNestCnt(A6)
  15244.     MOVE.B    bytesinbuff(pc),D1
  15245.     BNE.S    noTBEreq
  15246.     MOVE.W    #$8001,$DFF09C    ;request TBE
  15247. noTBEreq
  15248.     LEA    buffptr(PC),A2    ;end of buffer (ptr)
  15249.     MOVE.L    (A2),A1        ;buffer pointer
  15250. adddataloop
  15251.     MOVE.B    (A0)+,D1    ;get byte
  15252.     BPL.S    norscheck    ;this isn't a status byte
  15253.     CMP.B    #$EF,D1        ;forget system messages
  15254.     BHI.S    norscheck
  15255.     CMP.B    lastcmdbyte(PC),D1 ;same as previos status byte??
  15256.     BEQ.S    samesb        ;yes, skip
  15257.     MOVE.B    D1,lastcmdbyte    ;no, don't skip but remember!!
  15258. norscheck
  15259.     MOVE.B    D1,(A1)+    ;push it to midi send buffer
  15260.     ADDQ.B    #1,bytesinbuff
  15261. samesb    CMP.L    A2,A1    ;end of buffer??
  15262.     BNE.S    noresbuffptr    ;no, no!!
  15263.     LEA    sendbuffer(pc),a1 ;better reset it to avoid trashing
  15264. noresbuffptr
  15265.     SUBQ.B    #1,D0
  15266.     BNE.S    adddataloop
  15267.     MOVE.L    A1,(A2)        ;push new buffer ptr back
  15268. overflow
  15269.     SUBQ.B    #1,IDNestCnt(A6)
  15270.     BGE.S    retamd1
  15271.     MOVE.W    #$C000,$DFF09A    ;enable interrupts again
  15272. retamd1    MOVE.L    (SP)+,A2
  15273. retamd    RTS
  15274.  
  15275. PrevTBE        dc.l    0
  15276. PrevRBF        dc.l    0        
  15277. PrevBits    dc.b    0,0
  15278.  
  15279. MIDIOutInterrupt
  15280.     dc.l    0,0
  15281.     dc.b    2,0
  15282.     dc.l    MIDIOutName,buffptr,MIDIOutIntHandler
  15283.  
  15284. MIDIInInterrupt
  15285.     dc.l    0,0
  15286.     dc.b    2,0
  15287.     dc.l    MIDIInName,MIDIinBuffer,MIDIInIntHandler
  15288.  
  15289. buffptr        dc.l    sendbuffer
  15290. readbuffptr    dc.l    sendbuffer
  15291. sendbuffer    ds.b    128
  15292.  
  15293. SerPortAlloc    dc.b    0
  15294. bytesinbuff    dc.b    0
  15295. MiscResBase    dc.l    0
  15296. lastcmdbyte    dc.b    0
  15297.         even
  15298.  
  15299. MIDIOutName    dc.b    'PT MIDI Out',0
  15300. MIDIInName    dc.b    'PT MIDI In',0
  15301. MiscResName    dc.b    'misc.resource',0
  15302. SerDevName    dc.b    'serial.device',0
  15303.         even
  15304.  
  15305.  
  15306. ;----- read from input buffer -----
  15307.  
  15308. MIDIin    MOVE.B    MIDIinFrom(PC),D0
  15309.     CMP.B    MIDIinTo(PC),D0
  15310.     BNE    migetbyt
  15311.     MOVEQ    #2,D1
  15312.     RTS
  15313. migetbyt
  15314.     MOVE.L    MIDIinBuffer(PC),A0
  15315.     MOVE.L    A0,$7FFF0
  15316.     MOVE.B    (A0,D0.W),D0
  15317.     ADDQ.B    #1,MIDIinFrom
  15318.     MOVEQ    #0,D1
  15319.     RTS
  15320.  
  15321. CheckMIDIin
  15322.     TST.B    MIDIFlag
  15323.     BEQ    Return2
  15324.     BSR    MIDIin
  15325.     TST.L    D1
  15326.     BEQ    mic_ok
  15327.     MOVE.B    #1,MIDIError
  15328.     RTS
  15329.  
  15330. mic_ok    CLR.B    MIDIError
  15331.     TST.B    D0
  15332.     BPL    mic_databyte
  15333. ;statusbyte here
  15334.     CMP.B    #$F0,D0
  15335.     BHS    MIDISysMessage
  15336.     MOVE.B    D0,MIDIRunStatus
  15337.     MOVE.B    D0,D1
  15338.     AND.B    #$F0,D1
  15339.     MOVE.B    D1,MIDIRunCommand
  15340.     AND.B    #$0F,D0
  15341.     MOVE.B    D0,MIDIRunChannel
  15342.     CLR.B    MIDIByteCount
  15343.     RTS
  15344.  
  15345. mic_databyte
  15346.     MOVE.B    MIDIRunCommand(PC),D1
  15347.     CMP.B    #$80,D1
  15348.     BEQ    M_NoteOff
  15349.     CMP.B    #$90,D1
  15350.     BEQ    M_NoteOn
  15351.     CMP.B    #$A0,D1
  15352.     BEQ    M_PolyTouch
  15353.     CMP.B    #$B0,D1
  15354.     BEQ    M_Control
  15355.     CMP.B    #$C0,D1
  15356.     BEQ    M_ProgChange
  15357.     CMP.B    #$D0,D1
  15358.     BEQ    M_MonoTouch
  15359.     CMP.B    #$E0,D1
  15360.     BEQ    M_PitchBend
  15361.     CMP.B    #$F0,D1
  15362.     BEQ    M_SysExData
  15363.     RTS
  15364.  
  15365. M_NoteOff
  15366.     TST.B    MIDIByteCount
  15367.     BNE    mnf_veloc
  15368.     MOVE.B    D0,MIDINote
  15369.     ADD.B    #1,MIDIByteCount
  15370.     RTS
  15371. mnf_veloc
  15372.     CLR.B    MIDIByteCount
  15373.     MOVE.B    D0,MIDIVelocity
  15374. ;    BSR    MidiPlay
  15375.     RTS
  15376.  
  15377. M_NoteOn
  15378.     MOVE.W    #$F0F,$DFF180
  15379.     TST.B    MIDIByteCount
  15380.     BNE    mno_veloc
  15381.     MOVE.B    D0,MIDINote
  15382.     ADD.B    #1,MIDIByteCount
  15383.     RTS
  15384. mno_veloc
  15385.     CLR.B    MIDIByteCount
  15386.     MOVE.B    D0,MIDIVelocity
  15387.     BEQ    mnf_veloc
  15388. ;* MidiPlay *
  15389.     MOVE.B    MIDINote,D0
  15390.     CMP.B    MIDIinTrans,D0
  15391.     BLO    miplskip
  15392.     SUB.B    MIDIinTrans(PC),D0
  15393.     CMP.B    #36,D0
  15394.     BLS    J_nkp
  15395.     RTS
  15396. miplskip
  15397.     CMP.B    XMIDI_Play,D0
  15398.     BEQ    J_PlaySong
  15399.     CMP.B    XMIDI_Pattern,D0
  15400.     BEQ    J_PlayPattern
  15401.     CMP.B    XMIDI_Edit,D0
  15402.     BEQ    J_Edit
  15403.     CMP.B    XMIDI_Record,D0
  15404.     BEQ    J_RecordPattern
  15405.     CMP.B    XMIDI_Stop,D0
  15406.     BEQ    J_StopIt
  15407.     RTS
  15408.  
  15409. J_nkp    JMP    nkpskip
  15410. J_PlaySong
  15411.     JMP    PlaySong
  15412. J_PlayPattern
  15413.     JMP    PlayPattern
  15414. J_Edit    JMP    Edit
  15415. J_RecordPattern
  15416.     JMP    RecordPattern
  15417. J_StopIt
  15418.     JMP    StopIt
  15419.  
  15420. MIDIinTrans    dc.b 60,0
  15421.  
  15422. XMIDI_Play    dc.b 40 ; E
  15423. XMIDI_Pattern    dc.b 38 ; D
  15424. XMIDI_Edit    dc.b 43 ; G
  15425. XMIDI_Record    dc.b 41 ; F
  15426. XMIDI_Stop    dc.b 36 ; C
  15427.         dc.b 0 ; free 0
  15428.  
  15429. M_PolyTouch
  15430.     TST.B    MIDIByteCount
  15431.     BNE    mpt_touch
  15432.     MOVE.B    D0,MIDINote
  15433.     ADD.B    #1,MIDIByteCount
  15434.     RTS
  15435. mpt_touch
  15436.     CLR.B    MIDIByteCount
  15437.     MOVE.B    D0,MIDITouch
  15438.     RTS
  15439.  
  15440. M_Control
  15441.     TST.B    MIDIByteCount
  15442.     BNE    mc_value
  15443.     MOVE.B    D0,MIDIController
  15444.     ADD.B    #1,MIDIByteCount
  15445.     RTS
  15446. mc_value
  15447.     CLR.B    MIDIByteCount
  15448.     MOVE.B    D0,MIDIlsb
  15449.     RTS
  15450.  
  15451. M_ProgChange
  15452.     MOVE.B    D0,MIDIProgram
  15453.     RTS
  15454. ;    ADDQ.B    #1,D0
  15455. ;    AND.B    #$1F,D0
  15456. ;    BNE    mpchskip
  15457. ;    TST.W    InsNum
  15458. ;    BEQ    mpchskip
  15459. ;    MOVE.W    InsNum(PC),LastInsNum
  15460. ;mpchskip
  15461. ;    MOVE.B    D0,InsNum+1
  15462. ;    BRA    ShowSampleInfo
  15463.  
  15464. M_MonoTouch
  15465.     MOVE.B    D0,MIDITouch
  15466.     RTS
  15467.  
  15468. M_PitchBend
  15469.     TST.B    MIDIByteCount
  15470.     BNE    mp_msb
  15471.     MOVE.B    D0,MIDIlsb
  15472.     ADD.B    #1,MIDIByteCount
  15473.     RTS
  15474. mp_msb    CLR.B    MIDIByteCount
  15475.     MOVE.B    D0,MIDImsb
  15476.     EXT.W    D0
  15477.     SUB.W    #128,D0
  15478.     MOVE.W    CurrentPlayNote,D1
  15479.     SUB.W    D0,D1
  15480.     CMP.W    #113,D1
  15481.     BLS.S    mp_2
  15482.     MOVE.W    #113,D1
  15483. mp_2    MOVE.L    NoteAddr,A0
  15484.     MOVE.W    D1,6(A0)
  15485.     RTS
  15486.  
  15487. NoteAddr    dc.l 0
  15488.  
  15489. M_rts    RTS
  15490.  
  15491. MIDISysMessage
  15492.     CMP.B    #$F0,D0
  15493.     BEQ    M_SysEx        ; System Exclusive
  15494.     CMP.B    #$F1,D0
  15495.     BEQ    M_rts        ; Quarter Frame (MIDI Time Code)
  15496.     CMP.B    #$F2,D0
  15497.     BEQ    M_SongPos    ; Song Position Pointer
  15498.     CMP.B    #$F3,D0
  15499.     BEQ    M_SongSelect    ; Song Select
  15500.     CMP.B    #$F4,D0
  15501.     BEQ    M_rts        ; -Reserved-
  15502.     CMP.B    #$F5,D0
  15503.     BEQ    M_rts        ; -Reserved-
  15504.     CMP.B    #$F6,D0
  15505.     BEQ    M_rts        ; -Reserved-
  15506.     CMP.B    #$F7,D0
  15507.     BEQ    M_EOX        ; End of System Exclusive
  15508.     CMP.B    #$F8,D0
  15509.     BEQ    M_rts        ; MIDI Timing Clock
  15510.     CMP.B    #$F9,D0
  15511.     BEQ    M_rts        ; -Reserved-
  15512.     CMP.B    #$FA,D0
  15513.     BEQ    M_Start        ; Start Message
  15514.     CMP.B    #$FB,D0
  15515.     BEQ    M_Continue    ; Continue Message
  15516.     CMP.B    #$FC,D0
  15517.     BEQ    M_Stop        ; Stop Message
  15518.     CMP.B    #$FD,D0
  15519.     BEQ    M_rts        ; --- Reserved ---
  15520.     CMP.B    #$FE,D0
  15521.     BEQ    M_rts        ; Active Sensing (Each 300ms if on)
  15522.     CMP.B    #$FF,D0
  15523.     BRA    M_rts        ; System Reset Message
  15524.  
  15525. M_SysEx        RTS
  15526. M_SysExData    RTS
  15527. M_SongPos    RTS
  15528. M_SongSelect    RTS
  15529. M_EOX        RTS
  15530.  
  15531. M_Start        JMP    PlaySong
  15532. M_Continue    RTS
  15533. M_Stop        JMP    StopIt
  15534.  
  15535. MIDIinBuffer    dc.l 0
  15536. MIDIinTo    dc.b 0
  15537. MIDIinFrom    dc.b 0
  15538.  
  15539. MIDIRunStatus    dc.b $80
  15540. MIDIRunChannel    dc.b 0
  15541. MIDIRunCommand    dc.b $08
  15542. MIDIByteCount    dc.b 0
  15543.  
  15544. MIDINote    dc.b 0
  15545. MIDIVelocity    dc.b 0
  15546. MIDITouch    dc.b 0
  15547. MIDIController    dc.b 0
  15548. MIDImsb        dc.b 0    
  15549. MIDIlsb        dc.b 0
  15550. MIDIProgram    dc.b 0
  15551. MIDIError    dc.b 0
  15552.  
  15553.  
  15554. ;---- Sampler Screen ----
  15555.  
  15556. SamplerScreen
  15557.     CLR.B    RawKeyCode
  15558.     JSR    WaitForButtonUp
  15559.     TST.W    SamScrEnable
  15560.     BNE    ExitFromSam
  15561.     MOVE.W    #1,SamScrEnable
  15562.     MOVE.L    EditMode(PC),SaveEditMode
  15563.     CLR.L    EditMode
  15564.  
  15565.     MOVE.L    TextBplPtr(PC),A0
  15566.     LEA    $15B8(A0),A0
  15567.     MOVE.L    A0,D0
  15568.     LEA    CopList2Bpl4Ptr,A1
  15569.     MOVE.W    D0,6(A1)
  15570.     SWAP    D0
  15571.     MOVE.W    D0,2(A1)
  15572.  
  15573.     MOVEQ    #0,D0
  15574.     MOVE.W    #270,D1
  15575.     MOVEQ    #14,D2
  15576.     LEA    CursorSpriteData,A0
  15577.     BSR    SetSpritePos
  15578.     JSR    SetSamSpritePtrs
  15579.     MOVE.W    CopCol0+16,CopList2+18
  15580.     BSR    SwapSamScreen
  15581.     BEQ    exisam2
  15582.     BSR    ClearSamScr
  15583.     JSR    DoShowFreeMem
  15584.     BSR    ShowSamNote
  15585.     BSR    ShowResamNote
  15586.     BRA    RedrawSample
  15587.  
  15588. ExitFromSam
  15589.     JSR    WaitForButtonUp
  15590.     MOVE.L    SamMemPtr,D0
  15591.     BEQ    exisam2
  15592.     MOVE.L    D0,A1
  15593.     BSR    Bjarne
  15594.     BSR.S    FreeDecompMem2
  15595. exisam2    JSR    SetDefSpritePtrs
  15596.     CLR.B    RawKeyCode
  15597.     CLR.W    SamScrEnable
  15598.     MOVEQ    #-1,D0
  15599.     MOVE.L    D0,MarkStartOfs
  15600.     MOVE.L    SaveEditMode(PC),EditMode
  15601.     BSR    SetScreenColors2
  15602.     JSR    SetupVUCols
  15603.     BSR    SetScrPatternPos
  15604.     BSR    ClearSamScr
  15605.     JSR    UpdateCursorPos
  15606.     JSR    SetTempo
  15607.     BRA    RedrawPattern
  15608.  
  15609. FreeDecompMem2
  15610.     MOVE.L    SamMemPtr,D0
  15611.     BEQ    Return2
  15612.     MOVE.L    D0,A1
  15613.     MOVE.L    SamMemSize,D0
  15614.     CLR.L    SamMemPtr
  15615.     MOVE.L    4.W,A6
  15616.     JSR    LVOFreeMem(A6)
  15617.     RTS
  15618.  
  15619. Decompact2
  15620.     MOVE.L    A0,CompPtr
  15621.     MOVE.L    D0,CompLen
  15622.     BSR.S    FreeDecompMem2
  15623.     MOVE.L    CompPtr(PC),A0
  15624.     MOVE.L    (A0),D0
  15625.     MOVE.L    D0,SamMemSize
  15626.     MOVEQ    #0,D1
  15627.     MOVE.L    4.W,A6
  15628.     JSR    LVOAllocMem(A6)
  15629.     MOVE.L    D0,SamMemPtr
  15630.     BEQ    OutOfMemErr
  15631.     MOVE.L    D0,A1
  15632.     MOVE.L    CompPtr(PC),A0
  15633.     MOVE.L    CompLen(PC),D0
  15634.     ADDQ.L    #4,A0
  15635.     SUBQ.L    #4,D0
  15636. dcmlop3    MOVE.B    (A0)+,D1
  15637.     CMP.B    #181,D1
  15638.     BEQ.S    DecodeIt3
  15639.     MOVE.B    D1,(A1)+
  15640. decom3    SUBQ.L    #1,D0
  15641.     CMP.L    #0,D0
  15642.     BGT.S    dcmlop3
  15643.     MOVE.L    SamMemPtr(PC),A1
  15644.     MOVEQ    #-1,D0
  15645.     RTS
  15646.  
  15647. DecodeIt3
  15648.     MOVEQ    #0,D1
  15649.     MOVE.B    (A0)+,D1
  15650.     MOVE.B    (A0)+,D2
  15651. dcdlop3    MOVE.B    D2,(A1)+
  15652.     DBRA    D1,dcdlop3
  15653.     SUBQ.L    #2,D0
  15654.     BRA.S    decom3
  15655.  
  15656. SwapSamScreen
  15657.     LEA    SampScreenData,A0
  15658.     MOVE.L    #SampScreenSize,D0
  15659.     BSR    Decompact2
  15660.     BEQ    Return2
  15661.  
  15662. bjasize=134*10
  15663. Bjarne    LEA    SamScrPos,A0
  15664.     MOVEQ    #1,D2
  15665. BjaLop1    MOVE.W    #bjasize-1,D1 ; 134
  15666. BjaLop2    MOVE.L    (A0),D0
  15667.     MOVE.L    (A1),(A0)+
  15668.     MOVE.L    D0,(A1)+
  15669.     DBRA    D1,BjaLop2
  15670.     ADD.L    #10240-bjasize*4,A0
  15671.     DBRA    D2,BjaLop1
  15672.  
  15673.     LEA    CopListInsPos,A0
  15674.     LEA    CopList2,A1
  15675.     MOVEQ    #29,D1
  15676. BjaLoop    MOVE.W    (A0),D0
  15677.     MOVE.W    (A1),(A0)+
  15678.     MOVE.W    D0,(A1)+
  15679.     DBRA    D1,BjaLoop
  15680.     MOVEQ    #-1,D0
  15681.     RTS
  15682.  
  15683. ClearSamScr
  15684.     MOVE.W    #5121,TextOffset
  15685.     MOVE.W    #2,TextLength
  15686.     MOVE.L    #blnktxt,ShowTextPtr
  15687.     BSR    ShowText
  15688.     MOVE.W    #4964,TextOffset
  15689.     MOVE.W    #3,TextLength
  15690.     BSR    ShowText
  15691.     MOVE.W    #130*10-1,D0
  15692.     MOVE.L    TextBplPtr,A0
  15693.     LEA    $15B8(A0),A0
  15694.     MOVE.L    A0,LineScreen
  15695.     MOVEQ    #0,D1
  15696. clrsslp    MOVE.L    D1,(A0)+
  15697.     DBRA    D0,clrsslp
  15698.     RTS
  15699.  
  15700. blnktxt    dc.b "    "
  15701.  
  15702. ClearSamArea
  15703.     MOVE.W    #64*10-1,D0
  15704.     MOVE.L    TextBplPtr,A0
  15705.     LEA    $15B8(A0),A0
  15706.     MOVE.L    A0,LineScreen
  15707.     MOVEQ    #0,D1
  15708. clrsare    MOVE.L    D1,(A0)+
  15709.     DBRA    D0,clrsare
  15710.     RTS
  15711.  
  15712. CheckSamGadgets
  15713.     MOVEM.W    MouseX2,D0/D1
  15714.     CMP.W    #139,D1
  15715.     BLO    SamTopBar
  15716.     CMP.W    #139+64,D1
  15717.     BLO    SamplePressed
  15718.     CMP.W    #201+11,D1
  15719.     BLO    SamDragBar
  15720.     CMP.W    #201+22,D1
  15721.     BLO    SamMenu1
  15722.     CMP.W    #201+33,D1
  15723.     BLO    SamMenu2
  15724.     CMP.W    #201+44,D1
  15725.     BLO    SamMenu3
  15726.     CMP.W    #201+66,D1
  15727.     BLO    SamMenu4
  15728.     RTS
  15729.  
  15730. SamTopBar
  15731.     CMP.W    #32,D0
  15732.     BLO    ExitFromSam
  15733.     RTS
  15734.  
  15735. SamMenu1
  15736.     CMP.W    #32,D0
  15737.     BLO    Return2
  15738.     CMP.W    #96,D0
  15739.     BLO    PlayWaveform
  15740.     CMP.W    #176,D0
  15741.     BLO    ShowRange
  15742.     CMP.W    #246,D0
  15743.     BLO    ZoomOut
  15744.     BRA    DispBox
  15745.  
  15746. SamMenu2
  15747.     CMP.W    #32,D0
  15748.     BLO    StopPlaying
  15749.     CMP.W    #96,D0
  15750.     BLO    PlayDisplay
  15751.     CMP.W    #176,D0
  15752.     BLO    ShowAll
  15753.     CMP.W    #246,D0
  15754.     BLO    RangeAll
  15755.     BRA    LoopToggle
  15756.  
  15757. SamMenu3
  15758.     CMP.W    #32,D0
  15759.     BLO    StopPlaying
  15760.     CMP.W    #96,D0
  15761.     BLO    PlayRange
  15762.     CMP.W    #116,D0
  15763.     BLO    CurToStart
  15764.     CMP.W    #136,D0
  15765.     BLO    CurToEnd
  15766.     CMP.W    #176,D0
  15767.     BLO    SwapBuffer
  15768.     CMP.W    #246,D0
  15769.     BLO    Sampler
  15770.     BRA    SetSamNote
  15771.  
  15772. SamMenu4
  15773.     CMP.W    #32,D0
  15774.     BLO    SamCut
  15775.     CMP.W    #64,D0
  15776.     BLO    SamCopy
  15777.     CMP.W    #96,D0
  15778.     BLO    SamPaste
  15779.     CMP.W    #136,D0
  15780.     BLO    RampVolume
  15781.     CMP.W    #176,D0
  15782.     BLO    TuningTone
  15783.     CMP.W    #246,D0
  15784.     BLO    Resample
  15785.     BRA    SetResamNote
  15786.  
  15787.  
  15788. PlayWaveform
  15789.     JSR    PlayNote
  15790.     JMP    WaitForButtonUp
  15791. PlayDisplay
  15792.     LEA    SampleInfo,A0
  15793.     MOVE.L    SamOffset(PC),StartOfs
  15794.     MOVE.L    SamDisplay(PC),D0
  15795.     LSR.L    #1,D0
  15796.     MOVE.W    D0,(A0)
  15797.     CLR.W    4(A0)
  15798.     MOVE.W    #1,6(A0)
  15799.     MOVE.W    PlayInsNum,-(SP)
  15800.     CLR.W    PlayInsNum
  15801.     JSR    PlayNote
  15802.     MOVE.W    (SP)+,PlayInsNum
  15803.     BSR    ShowSampleInfo
  15804.     JMP    WaitForButtonUp
  15805. PlayRange
  15806.     MOVE.L    MarkStartOfs(PC),D1
  15807.     BMI    NoRangeError
  15808.     MOVE.L    MarkEndOfs(PC),D0
  15809.     CMP.L    D0,D1
  15810.     BEQ    LargerRangeError
  15811.     LEA    SampleInfo,A0
  15812.     MOVE.L    D1,StartOfs
  15813.     SUB.L    D1,D0
  15814.     LSR.L    #1,D0
  15815.     MOVE.W    D0,(A0)
  15816.     CLR.W    4(A0)
  15817.     MOVE.W    #1,6(A0)
  15818.     MOVE.W    PlayInsNum,-(SP)
  15819.     CLR.W    PlayInsNum
  15820.     JSR    PlayNote
  15821.     MOVE.W    (SP)+,PlayInsNum
  15822.     BSR    ShowSampleInfo
  15823.     JMP    WaitForButtonUp
  15824. StopPlaying
  15825.     BRA    TurnOffVoices
  15826.  
  15827. StartOfs
  15828.     dc.l    0
  15829.  
  15830. ;----
  15831.  
  15832. ShowRange
  15833.     MOVE.L    MarkStartOfs(PC),D0
  15834.     BMI    NoRangeError
  15835.     MOVE.L    MarkEndOfs(PC),D1
  15836.     CMP.L    D1,D0
  15837.     BEQ    LargerRangeError
  15838.     SUB.L    D0,D1
  15839.     BNE    shorano
  15840.     MOVEQ    #1,D1
  15841. shorano    MOVE.L    D1,SamDisplay
  15842.     MOVE.L    D0,SamOffset
  15843.     MOVEQ    #-1,D0
  15844.     MOVE.L    D0,MarkStartOfs
  15845.     CLR.W    MarkStart
  15846.     BSR    DisplaySample
  15847.     JMP    WaitForButtonUp
  15848.  
  15849. ZoomOut    MOVE.L    SamDisplay(PC),D0
  15850.     MOVE.L    SamLength(PC),D1
  15851.     MOVE.L    SamOffset(PC),D2
  15852.     MOVE.L    D0,D3
  15853.     LSL.L    #1,D3
  15854.     CMP.L    D1,D3
  15855.     BHI    ShowAll
  15856.     LSR.L    #1,D0
  15857.     CMP.L    D2,D0
  15858.     BLO    zoomou2
  15859.     MOVEQ    #0,D0
  15860. zoomou2    SUB.L    D0,D2
  15861.     MOVE.L    D2,D0
  15862.     ADD.L    D3,D0
  15863.     CMP.L    D1,D0
  15864.     BLS    zoomou3
  15865.     SUB.L    D3,D1
  15866.     MOVE.L    D1,D2
  15867. zoomou3    MOVE.L    D2,SamOffset
  15868.     MOVE.L    D3,SamDisplay
  15869.     BSR    OffsetToMark
  15870.     MOVE.L    MarkStartOfs(PC),D0
  15871.     CMP.L    MarkEndOfs(PC),D0
  15872.     BNE    zoomouo
  15873.     MOVEQ    #-1,D0
  15874.     MOVE.L    D0,MarkStartOfs
  15875. zoomouo    BSR    DisplaySample
  15876.     JMP    WaitForButtonUp
  15877.  
  15878. ShowAll    CLR.L    SamOffset
  15879.     MOVE.L    SamLength(PC),SamDisplay
  15880.     BSR    OffsetToMark
  15881.     MOVE.L    MarkStartOfs(PC),D0
  15882.     CMP.L    MarkEndOfs(PC),D0
  15883.     BNE    shoallo
  15884.     MOVEQ    #-1,D0
  15885.     MOVE.L    D0,MarkStartOfs
  15886.     CLR.W    MarkStart
  15887. shoallo    BSR    DisplaySample
  15888.     JMP    WaitForButtonUp
  15889.  
  15890. RangeAll
  15891.     BSR    InvertRange
  15892.     MOVE.W    #3,MarkStart
  15893.     MOVE.W    #316,MarkEnd
  15894.     BSR    MarkToOffset
  15895. ranall2    BSR    InvertRange
  15896.     JMP    WaitForButtonUp
  15897.  
  15898.  
  15899. CurToStart
  15900.     BSR    InvertRange
  15901.     MOVEQ    #3,D0
  15902.     MOVE.W    D0,MarkStart
  15903.     MOVE.W    D0,MarkEnd
  15904.     MOVE.L    SamOffset(PC),D0
  15905.     MOVE.L    D0,MarkStartOfs
  15906.     MOVE.L    D0,MarkEndOfs
  15907.     BRA.S    ranall2
  15908.  
  15909. CurToEnd
  15910.     BSR    InvertRange
  15911.     MOVE.W    #316,D0
  15912.     MOVE.W    D0,MarkStart
  15913.     MOVE.W    D0,MarkEnd
  15914.     MOVE.L    SamOffset(PC),D0
  15915.     ADD.L    SamDisplay(PC),D0
  15916.     MOVE.L    D0,MarkStartOfs
  15917.     MOVE.L    D0,MarkEndOfs
  15918.     BRA.S    ranall2
  15919.  
  15920. SwapBuffer
  15921.     MOVE.W    InsNum(PC),D1
  15922.     BEQ    NotSampleNull
  15923.     LSL.W    #2,D1
  15924.     LEA    SamplePtrs,A0
  15925.     LEA    (A0,D1.W),A0
  15926.  
  15927.     MOVE.L    CopyBufPtr(PC),D0
  15928.     MOVE.L    (A0),CopyBufPtr
  15929.     MOVE.L    D0,(A0)
  15930.     MOVE.L    D0,A1
  15931.     CLR.W    (A1)
  15932.  
  15933.     MOVE.L    CopyBufSize(PC),D0
  15934.     MOVE.L    124(A0),CopyBufSize
  15935.     MOVE.L    D0,124(A0)
  15936.  
  15937.     MOVE.L    SongDataPtr(PC),A0
  15938.     MOVE.W    InsNum(PC),D1
  15939.     MULU    #30,D1
  15940.     LEA    12(A0,D1.W),A0
  15941.     LSR.L    #1,D0
  15942.     MOVE.W    D0,(A0)
  15943.     MOVE.L    RepBuf(PC),D0
  15944.     MOVE.L    4(A0),RepBuf
  15945.     MOVE.L    D0,4(A0)
  15946.  
  15947.     MOVE.W    RepBuf2(PC),D0
  15948.     MOVE.W    2(A0),RepBuf2
  15949.     TST.B    D0
  15950.     BNE.S    swabuf2
  15951.     MOVE.B    #$40,D0
  15952. swabuf2    MOVE.W    D0,2(A0)
  15953.     JSR    TurnOffVoices
  15954.     BSR    ValidateLoops
  15955.     BSR    ShowSampleInfo
  15956.     BSR    UpdateRepeats
  15957.     BSR    RedrawSample
  15958.     JMP    WaitForButtonUp
  15959.  
  15960. RepBuf    dc.l    1
  15961. RepBuf2    dc.w    $0040
  15962.  
  15963. ;----
  15964.  
  15965. NoRangeError
  15966.     LEA    NoRangeText(PC),A0
  15967. nres2    BSR    ShowStatusText
  15968.     JMP    SetErrorPtrCol
  15969.  
  15970. LargerRangeError
  15971.     LEA    LargerRangeText(PC),A0
  15972.     BRA.S    nres2
  15973.  
  15974. SetCursorError
  15975.     LEA    SetCursorText(PC),A0
  15976.     BRA.S    nres2
  15977.  
  15978. BufIsEmptyError
  15979.     LEA    BufIsEmptyText(PC),A0
  15980.     BRA.S    nres2
  15981.  
  15982. EmptySampleError
  15983.     LEA    EmptySampleText(PC),A0
  15984.     BRA.S    nres2
  15985.  
  15986. NoRangeText    dc.b "no range selected",0
  15987. LargerRangeText    dc.b "set larger range",0
  15988. SetCursorText    dc.b "set cursor pos",0
  15989. BufIsEmptyText    dc.b "buffer is empty",0
  15990. EmptySampleText    dc.b "sample is empty",0
  15991.  
  15992. ;----
  15993.  
  15994. DispBox
  15995.     RTS
  15996.  
  15997. LoopToggle
  15998.     JSR    WaitForButtonUp
  15999.     MOVE.W    InsNum(PC),D1
  16000.     BEQ    NotSampleNull
  16001.     MOVE.L    SongDataPtr(PC),A0
  16002.     MULU    #30,D1
  16003.     LEA    12(A0,D1.W),A0
  16004.     TST.W    LoopOnOffFlag
  16005.     BEQ.S    loopton
  16006.     MOVE.L    4(A0),SavSamInf    
  16007.     MOVEQ    #1,D0
  16008.     MOVE.L    D0,4(A0)
  16009.     BSR    ValidateLoops
  16010.     JSR    TurnOffVoices
  16011. looptlo    BSR    ShowSampleInfo
  16012.     BSR    UpdateRepeats
  16013.     BRA    DisplaySample
  16014. loopton    MOVE.L    SavSamInf(PC),D0
  16015.     BNE.S    loopto2
  16016.     MOVE.W    (A0),D0
  16017. loopto2    MOVE.L    D0,4(A0)
  16018.     BSR    ValidateLoops
  16019.     BRA    looptlo
  16020.  
  16021. ShowLoopToggle
  16022.     LEA    ToggleOFFText(PC),A0
  16023.     TST.W    LoopOnOffFlag
  16024.     BEQ.S    sltskip
  16025.     LEA    ToggleONText(PC),A0
  16026. sltskip    MOVEQ    #3,D0
  16027.     MOVE.W    #9076,D1
  16028.     BRA    ShowText3
  16029.  
  16030. LoopOnOffFlag    dc.w 0
  16031. SavSamInf    dc.l 0
  16032.  
  16033. SetSamNote
  16034.     BSR    ShowResamNote
  16035.     MOVE.W    #9516,TextOffset
  16036.     MOVE.W    #3,TextLength
  16037.     MOVE.L    #SpcNoteText,ShowTextPtr
  16038.     BSR    ShowText
  16039.     MOVE.W    #1,SamNoteType
  16040.     MOVE.L    #SampleNote,SplitAddress
  16041.     JMP    WaitForButtonUp
  16042.  
  16043. SetResamNote
  16044.     BSR    ShowSamNote
  16045.     MOVE.W    #9956,TextOffset
  16046.     MOVE.W    #3,TextLength
  16047.     MOVE.L    #SpcNoteText,ShowTextPtr
  16048.     BSR    ShowText
  16049.     MOVE.W    #2,SamNoteType
  16050.     MOVE.L    #ResampleNote,SplitAddress
  16051.     JMP    WaitForButtonUp
  16052.  
  16053. ResampleText    dc.b "Resample?",0
  16054. ResamplingText    dc.b "Resampling...",0
  16055.  
  16056. Resample
  16057.     LEA    ResampleText(PC),A0
  16058.     JSR    AreYouSure
  16059.     BNE    Return2
  16060.     JSR    StorePtrCol
  16061.     JSR    SetWaitPtrCol
  16062.     LEA    ResamplingText(PC),A0
  16063.     BSR    ShowStatusText
  16064.     LEA    SamplePtrs,A0
  16065.     MOVE.W    InsNum(PC),D1
  16066.     BEQ    NotSampleNull
  16067.     LSL.W    #2,D1
  16068.     LEA    (A0,D1.W),A0
  16069.     MOVE.L    (A0),D0
  16070.     BEQ    ERC2
  16071.     MOVE.L    D0,A2
  16072.     MOVE.L    124(A0),D6
  16073.     CMP.L    #2,D6
  16074.     BLS    ERC2
  16075.  
  16076.     MOVE.L    SongDataPtr(PC),A0
  16077.     MOVE.W    InsNum(PC),D1
  16078.     MULU    #30,D1
  16079.     MOVEQ    #0,D0
  16080.     MOVE.B    12+2(A0,D1.W),D0 ; finetune
  16081.     MULU    #37*2,D0
  16082.     LEA    PeriodTable(PC),A0
  16083.     ADD.L    D0,A0
  16084.     MOVEQ    #0,D1
  16085.     MOVE.W    ResampleNote(PC),D1
  16086.     LSL.W    #1,D1
  16087.     MOVE.W    (A0,D1.W),D1
  16088.     BEQ    ERC2
  16089.  
  16090.     LEA    PeriodTable,A0
  16091.     MOVEQ    #0,D5
  16092.     MOVE.W    TuneNote,D5
  16093.     LSL.W    #1,D5
  16094.     MOVE.W    (A0,D5.W),D5
  16095.     BEQ    ERC2
  16096.  
  16097. ; D1=resamperiod, D5=tuneperiod
  16098.  
  16099.     MOVE.L    D5,D0 ; tune
  16100.     LSL.L    #8,D0
  16101.     LSL.L    #4,D0 ; * 4096
  16102.     DIVU    D1,D0 ; / resample
  16103.     MOVEQ    #0,D4
  16104.     MOVE.W    D0,D4
  16105.     LSL.L    #4,D4 ; hi-word=add value, lo-word=fraction
  16106.  
  16107.     MOVE.W    D6,D7
  16108.     LSR.W    #1,D7
  16109.     MULU    D1,D7
  16110.     DIVU    D5,D7
  16111.     AND.L    #$FFFF,D7
  16112.     CMP.W    #2,D7
  16113.     BLO    ERC2
  16114.     CMP.W    #$7FFF,D7
  16115.     BLO    resamlo
  16116.     MOVE.W    #$7FFF,D7
  16117. resamlo    ADD.L    D7,D7
  16118.     MOVE.L    D7,D0
  16119.     MOVE.L    #MEMF_CHIP!MEMF_CLEAR,D1
  16120.     MOVE.L    4.W,A6
  16121.     JSR    LVOAllocMem(A6)
  16122.     TST.L    D0
  16123.     BEQ    SamMemError
  16124.     MOVE.L    D0,A1
  16125.     MOVE.L    D0,A3
  16126.     JSR    TurnOffVoices
  16127.     MOVE.L    A2,A0
  16128. ; D4=resample value, D6=old length, D7=new length
  16129. ; A0/A2=old sample, A1/A3=new sample
  16130.  
  16131.     MOVE.W    #32767,D1
  16132.     MOVEQ    #0,D3
  16133.     MOVEQ    #0,D5
  16134. resampleloop
  16135.     MOVE.B    1(A0),D0
  16136.     EXT.W    D0
  16137.     MULS    D1,D0
  16138.     MOVE.B    (A0),D2
  16139.     EXT.W    D2
  16140.     MULS    D3,D2
  16141.     ADD.L    D2,D0
  16142.     ASR.L    #8,D0
  16143.     ASR.L    #7,D0
  16144.     MOVE.B    D0,(A1)+
  16145.  
  16146.     ADD.L    D4,D5
  16147.     SWAP    D5
  16148.     MOVE.L    A2,A0
  16149.     MOVEQ    #0,D0
  16150.     MOVE.W    D5,D0
  16151.     ADD.L    D0,A0
  16152.     SWAP    D5
  16153.     MOVE.W    D5,D1
  16154.     LSR.W    #1,D1
  16155.     MOVE.W    #32767,D3
  16156.     SUB.W    D1,D3
  16157.  
  16158.     MOVE.L    A1,A4
  16159.     SUB.L    A3,A4
  16160.     CMP.L    D7,A4
  16161.     BHS.S    resamskip
  16162.     MOVE.L    A0,A4
  16163.     SUB.L    A2,A4
  16164.     CMP.L    D6,A4
  16165.     BLO.S    resampleloop
  16166.  
  16167. resamskip
  16168.     MOVE.L    A2,A1
  16169.     MOVE.L    D6,D0
  16170.     MOVE.L    4.W,A6
  16171.     JSR    LVOFreeMem(A6)
  16172.     MOVE.W    InsNum(PC),D1
  16173.     LSL.W    #2,D1
  16174.     LEA    SamplePtrs,A0
  16175.     LEA    (A0,D1.W),A0
  16176.     MOVE.L    A3,(A0)
  16177.     MOVE.L    D7,124(A0)
  16178.  
  16179.     MOVE.L    SongDataPtr(PC),A0
  16180.     MOVE.W    InsNum(PC),D1
  16181.     MULU    #30,D1
  16182.     LEA    12(A0,D1.W),A0
  16183.     LSR.L    #1,D7
  16184.     MOVE.W    D7,(A0)
  16185.     CLR.B    2(A0)
  16186.     CLR.W    4(A0)
  16187.     MOVE.W    #1,6(A0)
  16188.     JSR    RestorePtrCol
  16189.     BSR    ClearSamStarts
  16190.     BSR    ShowSampleInfo
  16191.     BSR    ShowAllRight
  16192.     BRA    RedrawSample
  16193.  
  16194. ERC2    JMP    ErrorRestoreCol
  16195.  
  16196. SamCut    CLR.B    RawKeyCode
  16197.     MOVE.L    MarkStartOfs(PC),D0
  16198.     BMI    NoRangeError
  16199.     CMP.L    MarkEndOfs(PC),D0
  16200.     BEQ    LargerRangeError
  16201.     TST.B    CutToBufFlag
  16202.     BEQ.S    samcut2
  16203.     BSR    SamCopy
  16204. samcut2    BSR    TurnOffVoices
  16205.     LEA    SamplePtrs(PC),A0
  16206.     MOVE.W    InsNum(PC),D1
  16207.     BEQ    NotSampleNull
  16208.     LSL.W    #2,D1
  16209.     LEA    (A0,D1.W),A0
  16210.     MOVE.L    (A0),D0
  16211.     BEQ    EmptySampleError
  16212.     MOVE.L    124(A0),D2
  16213.     CMP.L    #2,D2
  16214.     BLO    EmptySampleError
  16215.  
  16216.     MOVE.L    D0,A1
  16217.     MOVE.L    D0,A2        ; sample start
  16218.     MOVE.L    D0,A3
  16219.     MOVE.L    D0,A4
  16220.     MOVE.L    D0,A5
  16221.     ADD.L    MarkStartOfs(PC),A3    ; mark start
  16222.     MOVE.L    MarkEndOfs(PC),D0
  16223.     SUB.L    MarkStartOfs(PC),D0
  16224.     CMP.L    D2,D0
  16225.     BHS    Destroy
  16226.     MOVE.L    MarkEndOfs(PC),D0
  16227.     CMP.L    D2,D0
  16228.     BLO.S    samsome
  16229.     MOVE.L    D2,D0
  16230.     SUBQ.L    #1,D0
  16231. samsome    ADD.L    D0,A4    ; mark end
  16232.     ADD.L    D2,A5        ; sample end
  16233.  
  16234.     MOVE.L    A3,D0
  16235.     SUB.L    A2,D0
  16236.     ADD.L    A5,D0
  16237.     SUB.L    A4,D0
  16238.     BNE    sacoklen
  16239.     MOVEQ    #0,D3
  16240.     MOVEQ    #0,D4
  16241.     BRA    sacfree
  16242.  
  16243. sacoklen
  16244.     MOVE.L    D0,D3
  16245.     MOVEQ    #MEMF_CHIP,D1
  16246.     MOVE.L    4.W,A6
  16247.     JSR    LVOAllocMem(A6)
  16248.     MOVE.L    D0,D4
  16249.     BEQ    OutOfMemErr ; No memory
  16250.  
  16251.     MOVE.L    D0,A0
  16252.     MOVE.L    A2,A1
  16253.     MOVE.L    A3,D0
  16254.     SUB.L    A2,D0
  16255.     BRA.S    sacskp1
  16256. saclop1    MOVE.B    (A2)+,(A0)+
  16257. sacskp1    DBRA    D0,saclop1
  16258.  
  16259.     MOVE.L    A5,D0
  16260.     SUB.L    A4,D0
  16261.     BRA.S    sacskp2
  16262. smclop2    MOVE.B    (A4)+,(A0)+
  16263. sacskp2    DBRA    D0,smclop2
  16264.  
  16265. sacfree    MOVE.L    D2,D0
  16266.     MOVE.L    4.W,A6
  16267.     JSR    LVOFreeMem(A6)
  16268.  
  16269.     MOVE.W    InsNum(PC),D1
  16270.     LSL.W    #2,D1
  16271.     LEA    SamplePtrs(PC),A0
  16272.     LEA    (A0,D1.W),A0
  16273.     MOVE.L    D4,(A0)
  16274.     MOVE.L    D3,124(A0)
  16275.  
  16276.     MOVE.L    D4,SamStart
  16277.     MOVE.L    D3,SamLength
  16278.     MOVE.L    SamOffset(PC),D4
  16279.     ADD.L    SamDisplay(PC),D4
  16280.     CMP.L    D3,D4
  16281.     BLO    samcuto        ; display ok
  16282.     MOVE.L    SamDisplay(PC),D4
  16283.     CMP.L    D3,D4
  16284.     BLO    samnils        ; if display < length, move offset
  16285. samsall    CLR.L    SamOffset    ; else show all
  16286.     MOVE.L    D3,SamDisplay
  16287.     BRA    samcuto
  16288. samnils    MOVE.L    D3,D4
  16289.     SUB.L    SamDisplay(PC),D4
  16290.     BMI.S    samsall        ; if offset < 0, show all
  16291.     MOVE.L    D4,SamOffset
  16292. samcuto    MOVE.L    SongDataPtr(PC),A0
  16293.     MOVE.W    InsNum(PC),D1
  16294.     MULU    #30,D1
  16295.     LEA    12(A0,D1.W),A0
  16296.  
  16297.     LSR.L    #1,D3
  16298.     MOVE.W    D3,(A0)
  16299.     MOVE.W    4(A0),D0
  16300.     CMP.W    D3,D0
  16301.     BLS.S    samcuxx    
  16302.     MOVEQ    #1,D0
  16303.     MOVE.L    D0,4(A0)
  16304.     BRA.S    samcuex
  16305. samcuxx    ADD.W    6(A0),D0
  16306.     CMP.W    D3,D0
  16307.     BLS.S    samcuex
  16308.     SUB.W    4(A0),D3
  16309.     MOVE.W    D3,6(A0)
  16310.  
  16311. samcuex    MOVE.L    MarkStartOfs(PC),MarkEndOfs
  16312.     BSR    ClearSamStarts
  16313.     BSR    ValidateLoops
  16314.     BSR    ShowSampleInfo
  16315.     BRA    DisplaySample
  16316.  
  16317.  
  16318. SamCopy    CLR.B    RawKeyCode
  16319.     MOVE.L    MarkStartOfs(PC),D0
  16320.     BMI    NoRangeError
  16321.     CMP.L    MarkEndOfs(PC),D0
  16322.     BEQ    LargerRangeError
  16323.     LEA    SamplePtrs(PC),A0
  16324.     MOVE.W    InsNum(PC),D1
  16325.     BEQ    NotSampleNull
  16326.     LSL.W    #2,D1
  16327.     LEA    (A0,D1.W),A0
  16328.     MOVE.L    (A0),D0
  16329.     BEQ    EmptySampleError
  16330.     MOVE.L    124(A0),D2
  16331.     BEQ    EmptySampleError
  16332.     MOVE.L    D0,A3
  16333.     MOVE.L    D0,A4
  16334.     ADD.L    MarkStartOfs(PC),A3    ; mark start
  16335.     MOVE.L    MarkEndOfs(PC),D0    ; mark end
  16336.     CMP.L    D2,D0
  16337.     BLO.S    csamsom
  16338.     MOVE.L    D2,D0
  16339.     SUBQ.L    #1,D0
  16340. csamsom    ADD.L    D0,A4
  16341.     BSR.S    FreeCopyBuf
  16342.     MOVE.L    A4,D0
  16343.     SUB.L    A3,D0
  16344.     ADDQ.L    #1,D0
  16345.     MOVE.L    D0,CopyBufSize
  16346.     MOVEQ    #MEMF_CHIP,D1
  16347.     MOVE.L    4.W,A6
  16348.     JSR    LVOAllocMem(A6)
  16349.     MOVE.L    D0,CopyBufPtr
  16350.     BEQ    OutOfMemErr ; No memory
  16351.     MOVE.L    D0,A5
  16352. csamlop    MOVE.B    (A3)+,(A5)+
  16353.     CMP.L    A4,A3
  16354.     BLS.S    csamlop
  16355.     BSR    InvertRange
  16356.     BSR    InvertRange
  16357.     JMP    WaitForButtonUp
  16358.  
  16359. FreeCopyBuf
  16360.     MOVE.L    CopyBufPtr(PC),D0
  16361.     BEQ    Return2
  16362.     MOVE.L    D0,A1
  16363.     MOVE.L    CopyBufSize(PC),D0
  16364.     MOVE.L    4.W,A6
  16365.     JSR    LVOFreeMem(A6)
  16366.     CLR.L    CopyBufPtr
  16367.     RTS
  16368.  
  16369. CopyBufPtr    dc.l    0
  16370. CopyBufSize    dc.l    0
  16371.  
  16372. SamPaste
  16373.     CLR.B    RawKeyCode
  16374.     MOVE.L    MarkStartOfs(PC),D0
  16375.     BMI    SetCursorError
  16376.     LEA    SamplePtrs(PC),A0
  16377.     MOVE.W    InsNum(PC),D1
  16378.     BEQ    NotSampleNull
  16379.     LSL.W    #2,D1
  16380.     LEA    (A0,D1.W),A0
  16381.     MOVEQ    #0,D2
  16382.     MOVE.L    (A0),D0
  16383.     BEQ.S    sapanul
  16384.     MOVE.L    124(A0),D2
  16385. sapanul    MOVE.L    D0,A2
  16386.     MOVE.L    CopyBufPtr(PC),D3
  16387.     BEQ    BufIsEmptyError
  16388.     MOVE.L    D3,A3
  16389.     MOVE.L    CopyBufSize(PC),D3
  16390.     BEQ    BufIsEmptyError
  16391.  
  16392.     MOVE.L    D3,D4 ; copysize
  16393.     ADD.L    D2,D4 ; + origsize
  16394.     CMP.L    #$FFFE,D4
  16395.     BLO.S    sapaok
  16396.     MOVE.L    #$FFFE,D4
  16397. sapaok    MOVE.L    D4,D0
  16398.     MOVE.L    #MEMF_CHIP!MEMF_CLEAR,D1
  16399.     MOVE.L    4.W,A6
  16400.     JSR    LVOAllocMem(A6)
  16401.     TST.L    D0
  16402.     BEQ    OutOfMemErr
  16403.     MOVE.L    D0,A4
  16404.     MOVEQ    #0,D0
  16405.     TST.L    D2
  16406.     BEQ.S    sapask1
  16407.     MOVE.L    MarkStartOfs(PC),D0
  16408. sapask1    MOVE.L    D0,MarkStartOfs
  16409.     MOVE.L    A2,A1
  16410.     MOVE.L    D2,D1
  16411.     MOVE.L    A4,A5
  16412.     MOVE.L    A4,A0
  16413.     ADD.L    D4,A0
  16414. ; D0    = paste position
  16415. ; A0    = end of new sample
  16416. ; A1/D1 = copy of A2/D2
  16417. ; A2/D2 = original sample
  16418. ; A3/D3 = copy buffer
  16419. ; A4/D4 = new sample
  16420. ; A5    = copy of A4
  16421.     BRA.S    sapask2
  16422. sapalp1    MOVE.B    (A2)+,(A4)+ ; copy first part
  16423.     CMP.L    A0,A4
  16424.     BHS.S    sapaski
  16425.     SUBQ.L    #1,D2
  16426. sapask2    DBRA    D0,sapalp1
  16427.     BRA.S    sapask3
  16428. sapalp2    MOVE.B    (A3)+,(A4)+ ; copy from buffer
  16429.     CMP.L    A0,A4
  16430.     BHS.S    sapaski
  16431. sapask3    DBRA    D3,sapalp2
  16432.     TST.L    D2
  16433.     BEQ.S    sapaski
  16434.     BMI.S    sapaski
  16435. sapalp3    MOVE.B    (A2)+,(A4)+ ; copy last part
  16436.     CMP.L    A0,A4
  16437.     BHS.S    sapaski
  16438.     SUBQ.L    #1,D2
  16439.     BNE.S    sapalp3
  16440.  
  16441. sapaski    MOVE.L    D1,D0
  16442.     MOVE.L    4.W,A6
  16443.     JSR    LVOFreeMem(A6)
  16444.  
  16445.     MOVE.W    InsNum(PC),D1
  16446.     LSL.W    #2,D1
  16447.     LEA    SamplePtrs(PC),A0
  16448.     LEA    (A0,D1.W),A0
  16449.     MOVE.L    A5,(A0)
  16450.     MOVE.L    D4,124(A0)
  16451.  
  16452.     MOVE.L    SongDataPtr(PC),A0
  16453.     MOVE.W    InsNum(PC),D1
  16454.     MULU    #30,D1
  16455.     LEA    12(A0,D1.W),A0
  16456.     LSR.L    #1,D4
  16457.     MOVE.W    D4,(A0)
  16458.  
  16459.     MOVE.L    MarkStartOfs(PC),MarkEndOfs
  16460.     BSR    OffsetToMark
  16461.     BSR    ClearSamStarts
  16462.     BSR    ShowSampleInfo
  16463.     BRA    RedrawSample
  16464.  
  16465. RampVolume
  16466.     MOVE.L    TextBplPtr(PC),A0
  16467.     LEA    6209(A0),A0
  16468.     MOVEQ    #32,D3
  16469. ravlap2    MOVEQ    #16,D2
  16470. ravlap1    CLR.B    (A0)+
  16471.     DBRA    D2,ravlap1
  16472.     LEA    23(A0),A0
  16473.     DBRA    D3,ravlap2
  16474.     LEA    VolBoxPos,A0
  16475.     LEA    VolBoxData,A1
  16476.     MOVEQ    #1,D4
  16477. ravlop3    MOVEQ    #32,D3
  16478. ravlop2    MOVEQ    #16,D2
  16479. ravlop1    MOVE.B    (A1)+,(A0)+
  16480.     DBRA    D2,ravlop1
  16481.     ADDQ.L    #1,A1
  16482.     LEA    23(A0),A0
  16483.     DBRA    D3,ravlop2
  16484.     LEA    8920(A0),A0
  16485.     DBRA    D4,ravlop3
  16486.     BSR    ShowVolSliders
  16487.     JSR    WaitForButtonUp
  16488. ravloop    BTST    #2,$DFF016
  16489.     BEQ.S    ExitVolBox
  16490.     JSR    DoKeyBuffer
  16491.     MOVE.B    RawKeyCode(PC),D2
  16492.     CMP.B    #68,D2
  16493.     BEQ.S    ExitVolBox
  16494.     BTST    #6,$BFE001
  16495.     BNE.S    ravloop
  16496.     MOVEM.W    MouseX,D0-D1
  16497.     CMP.W    #72,D0
  16498.     BLO.S    ravloop
  16499.     CMP.W    #72+136,D0
  16500.     BHS.S    ravloop
  16501.     CMP.W    #155,D1
  16502.     BLO.S    ravloop
  16503.     CMP.W    #166,D1
  16504.     BLO.S    Vol1Slider
  16505.     CMP.W    #177,D1
  16506.     BLO    Vol2Slider
  16507.     CMP.W    #188,D1
  16508.     BLO    VolGadgs
  16509.     BRA.S    ravloop
  16510.  
  16511. ExitVolBox
  16512.     LEA    VolBoxPos,A0
  16513.     MOVEQ    #1,D2
  16514. revlap3    MOVEQ    #32,D1
  16515. revlap2    MOVEQ    #16,D0
  16516. revlap1    CLR.B    (A0)+
  16517.     DBRA    D0,revlap1
  16518.     LEA    23(A0),A0
  16519.     DBRA    D1,revlap2
  16520.     LEA    8920(A0),A0
  16521.     DBRA    D2,revlap3
  16522.     BRA    DisplaySample
  16523.  
  16524. Vol1Slider
  16525.     CMP.W    #167,D0
  16526.     BHI.S    v1skip
  16527.     LEA    Vol1(PC),A4
  16528.     MOVEQ    #0,D7
  16529. v1loop1    BTST    #6,$BFE001
  16530.     BNE    ravloop
  16531.     MOVE.W    MouseX(PC),D0
  16532.     CMP.W    D7,D0
  16533.     BEQ.S    v1loop1
  16534.     MOVE.W    D0,D7
  16535.     SUB.W    #107,D0
  16536.     BPL.S    v1skp2
  16537.     MOVEQ    #0,D0
  16538. v1skp2    CMP.W    #60,D0
  16539.     BLS.S    v1skp3
  16540.     MOVEQ    #60,D0
  16541. v1skp3    MULU    #200,D0
  16542.     DIVU    #60,D0
  16543.     MOVE.W    D0,(A4)
  16544. shvosl    BSR    ShowVolSliders
  16545.     BRA.S    v1loop1
  16546.  
  16547. v1skip    MOVE.W    #180,LineCurX
  16548.     MOVE.W    #164,LineCurY
  16549.     MOVE.W    #6342,TextOffset
  16550.     BSR    GetDec3Dig
  16551.     TST.W    AbortDecFlag
  16552.     BNE    shvosl
  16553.     CMP.W    #200,D0
  16554.     BLS.S    v1sk2
  16555.     MOVE.W    #200,D0
  16556. v1sk2    MOVE.W    D0,Vol1
  16557.     BRA.S    shvosl
  16558.  
  16559. Vol2Slider
  16560.     CMP.W    #167,D0
  16561.     BHI.S    v2skip
  16562.     LEA    Vol2(PC),A4
  16563.     MOVEQ    #0,D7
  16564.     BRA    v1loop1
  16565. v2skip    MOVE.W    #180,LineCurX
  16566.     MOVE.W    #175,LineCurY
  16567.     MOVE.W    #6782,TextOffset
  16568.     BSR    GetDec3Dig
  16569.     TST.W    AbortDecFlag
  16570.     BNE    shvosl
  16571.     CMP.W    #200,D0
  16572.     BLS.S    v2sk2
  16573.     MOVE.W    #200,D0
  16574. v2sk2    MOVE.W    D0,Vol2
  16575.     BRA    shvosl
  16576.  
  16577.  
  16578. VolGadgs
  16579.     CMP.W    #100,D0
  16580.     BLO    DoRampVol
  16581.     CMP.W    #144,D0
  16582.     BLO    Normalize
  16583.     CMP.W    #154,D0
  16584.     BLO.S    SetRampDown
  16585.     CMP.W    #164,D0
  16586.     BLO.S    SetRampUp
  16587.     CMP.W    #174,D0
  16588.     BLO.S    SetRampUnity
  16589.     BRA    ExitVolBox
  16590.  
  16591. SetRampDown
  16592.     MOVE.W    #100,Vol1
  16593.     CLR.W    Vol2
  16594.     BRA.S    sru2
  16595. SetRampUp
  16596.     CLR.W    Vol1
  16597.     MOVE.W    #100,Vol2
  16598.     BRA.S    sru2
  16599. SetRampUnity
  16600.     MOVE.W    #100,Vol1
  16601.     MOVE.W    #100,Vol2
  16602. sru2    BSR.S    ShowVolSliders
  16603.     JSR    WaitForButtonUp
  16604.     BRA    ravloop
  16605.  
  16606. ShowVolSliders
  16607.     MOVE.L    TextBplPtr(PC),A0
  16608.     LEA    6209(A0),A0
  16609.     MOVEQ    #21,D3
  16610. ravlip2    MOVEQ    #12,D2
  16611. ravlip1    CLR.B    (A0)+
  16612.     DBRA    D2,ravlip1
  16613.     LEA    27(A0),A0
  16614.     DBRA    D3,ravlip2
  16615.     MOVEQ    #0,D4
  16616.     MOVE.W    Vol1(PC),D4
  16617.     MOVEQ    #20,D5
  16618.     BSR    OneSlider
  16619.     MOVEQ    #0,D4
  16620.     MOVE.W    Vol2(PC),D4
  16621.     MOVEQ    #31,D5
  16622.     BSR    OneSlider
  16623.     MOVE.W    Vol1(PC),WordNumber
  16624.     MOVE.W    #6342,TextOffset
  16625.     BSR    Print3DecDigits
  16626.     MOVE.W    Vol2(PC),WordNumber
  16627.     MOVE.W    #6782,TextOffset
  16628.     BRA    Print3DecDigits
  16629.  
  16630. OneSlider
  16631.     MOVE.W    D4,D6
  16632.     ADD.W    D4,D4
  16633.     ADD.W    D6,D4
  16634.     DIVU    #10,D4
  16635.     ADD.W    #105,D4
  16636.     MOVEQ    #2,D6
  16637. oneslop    MOVE.W    D4,D0
  16638.     MOVE.W    D4,D2
  16639.     ADDQ.W    #5,D2
  16640.     MOVE.W    D5,D1
  16641.     MOVE.W    D5,D3
  16642.     BSR    DrawLine
  16643.     ADDQ.W    #1,D5
  16644.     DBRA    D6,oneslop
  16645.     RTS
  16646.  
  16647. DoRampVol
  16648.     CLR.B    RawKeyCode
  16649.     LEA    SamplePtrs(PC),A0
  16650.     MOVE.W    InsNum(PC),D1
  16651.     BEQ    nozerr1
  16652.     LSL.W    #2,D1
  16653.     LEA    (A0,D1.W),A0
  16654.     MOVEQ    #0,D2
  16655.     MOVE.L    (A0),D0
  16656.     BEQ    nozerr2
  16657.     MOVE.L    D0,A2
  16658.     MOVE.L    124(A0),D2
  16659.     BEQ    nozerr2
  16660.     MOVE.L    MarkStartOfs(PC),D0
  16661.     BMI    drvskip
  16662.     MOVE.L    MarkEndOfs(PC),D1
  16663.     SUB.L    D0,D1
  16664.     BEQ.S    drvskip
  16665.     ADD.L    D0,A2
  16666.     MOVE.L    D1,D2
  16667.     ADDQ.L    #1,D2
  16668. drvskip    JSR    StorePtrCol
  16669.     JSR    SetWaitPtrCol
  16670.     MOVE.L    D2,D5
  16671.     MOVEQ    #0,D3
  16672. drvloop    MOVE.W    D3,D1
  16673.     MULU    Vol2(PC),D1
  16674.     DIVU    D2,D1
  16675.     MOVE.W    D2,D4
  16676.     SUB.W    D3,D4
  16677.     MULU    Vol1(PC),D4
  16678.     DIVU    D2,D4
  16679.     ADD.W    D4,D1
  16680.     ADDQ.W    #1,D3
  16681.     MOVE.B    (A2),D0
  16682.     EXT.W    D0
  16683.     MULS    D1,D0
  16684.     DIVS    #100,D0
  16685.     CMP.W    #127,D0
  16686.     BLT.S    drvskp2
  16687.     MOVEQ    #127,D0
  16688. drvskp2    CMP.W    #-128,D0
  16689.     BGT.S    drvskp3
  16690.     MOVEQ    #-128,D0
  16691. drvskp3    MOVE.B    D0,(A2)+
  16692.     SUBQ.L    #1,D5
  16693.     BNE    drvloop
  16694.     JSR    RestorePtrCol
  16695.     BRA    ExitVolBox
  16696.  
  16697. nozerr1    BSR    NotSampleNull
  16698.     BRA    ravloop
  16699. nozerr2    BSR    EmptySampleError
  16700.     BRA    ravloop
  16701.  
  16702. Normalize
  16703.     CLR.B    RawKeyCode
  16704.     LEA    SamplePtrs(PC),A0
  16705.     MOVE.W    InsNum(PC),D1
  16706.     BEQ    nozerr1
  16707.     LSL.W    #2,D1
  16708.     LEA    (A0,D1.W),A0
  16709.     MOVEQ    #0,D2
  16710.     MOVE.L    (A0),D0
  16711.     BEQ    nozerr2
  16712.     MOVE.L    D0,A2
  16713.     MOVE.L    124(A0),D2
  16714.     BEQ    nozerr2
  16715.     MOVE.L    MarkStartOfs(PC),D0
  16716.     BMI    nozskip
  16717.     MOVE.L    MarkEndOfs(PC),D1
  16718.     SUB.L    D0,D1
  16719.     BEQ.S    nozskip
  16720.     ADD.L    D0,A2
  16721.     MOVE.L    D1,D2
  16722.     ADDQ.L    #1,D2
  16723. nozskip    JSR    StorePtrCol
  16724.     JSR    SetWaitPtrCol
  16725.     MOVEQ    #0,D0
  16726. nozloop    MOVE.B    (A2)+,D1
  16727.     EXT.W    D1
  16728.     BPL.S    nozskp2
  16729.     NEG.W    D1
  16730. nozskp2    CMP.W    D0,D1
  16731.     BLO.S    nozskp3
  16732.     MOVE.W    D1,D0
  16733. nozskp3    SUBQ.L    #1,D2
  16734.     BNE    nozloop
  16735.     JSR    RestorePtrCol
  16736.     TST.W    D0
  16737.     BEQ    SetRampUnity
  16738.     CMP.W    #127,D0
  16739.     BHI    SetRampUnity
  16740.     CMP.W    #64,D0
  16741.     BLO.S    nozmax
  16742.     MOVE.L    #12700,D1
  16743.     DIVU    D0,D1
  16744.     MOVE.W    D1,Vol1
  16745.     MOVE.W    D1,Vol2
  16746.     BRA    sru2
  16747. nozmax    MOVE.W    #200,Vol1
  16748.     MOVE.W    #200,Vol2
  16749.     BRA    sru2
  16750.  
  16751. Vol1    dc.w    100
  16752. Vol2    dc.w    100
  16753.  
  16754. TuningTone
  16755.     JSR    WaitForButtonUp
  16756.     CLR.B    RawKeyCode
  16757.     TST.W    TToneFlag
  16758.     BNE    TToneOff
  16759.     MOVE.W    #1,TToneFlag
  16760.     MOVE.W    PattCurPos,D2
  16761.     DIVU    #6,D2
  16762.     ADDQ.W    #1,D2
  16763.     AND.W    #3,D2
  16764.     MOVEQ    #1,D0
  16765.     LSL.W    D2,D0
  16766.     MOVE.W    D0,TToneBit
  16767.     LEA    $DFF0A0,A0
  16768.     LSL.W    #4,D2
  16769.     LEA    (A0,D2.W),A0
  16770.     LEA    PeriodTable(PC),A1
  16771.     MOVE.W    TuneNote,D1
  16772.     LSL.W    #1,D1
  16773.     MOVE.W    (A1,D1.W),D1
  16774.     LEA    TToneData,A2
  16775.     MOVE.W    D0,$DFF096 ; DMACON
  16776.     MOVE.L    A2,(A0)
  16777.     MOVE.W    #16,4(A0) ; 32 bytes
  16778.     MOVE.W    D1,6(A0)
  16779.     MOVE.W    TToneVol,8(A0)
  16780.     MOVE.W    DMAWait,D2
  16781. ttowait    DBRA    D2,ttowait
  16782.     BSET    #15,D0
  16783.     MOVE.W    D0,$DFF096
  16784.     RTS
  16785.  
  16786. TToneOff
  16787.     CLR.W    TToneFlag
  16788.     MOVE.W    TToneBit(PC),$DFF096
  16789.     RTS
  16790.  
  16791. TToneFlag    dc.w 0
  16792. TToneBit    dc.w 0
  16793.  
  16794. SamplePressed
  16795.     CMP.W    #144,D1
  16796.     BHS.S    spruskp
  16797.     MOVE.W    LoopStartPos(PC),D2
  16798.     BEQ.S    sprusk5
  16799.     SUBQ.W    #3,D2
  16800.     CMP.W    D2,D0
  16801.     BLT.S    sprusk5
  16802.     ADDQ.W    #4,D2
  16803.     CMP.W    D2,D0
  16804.     BLO    LoopStartDrag
  16805. sprusk5    MOVE.W    LoopEndPos(PC),D2
  16806.     BEQ.S    spruskp
  16807.     SUBQ.W    #3,D2
  16808.     CMP.W    D2,D0
  16809.     BLT.S    spruskp
  16810.     ADDQ.W    #4,D2
  16811.     CMP.W    D2,D0
  16812.     BLO    LoopEndDrag
  16813. spruskp    CMP.W    #3,D0
  16814.     BLO    Return2
  16815.     CMP.W    #317,D0
  16816.     BHS    Return2
  16817.     MOVE.W    D0,LastSamPos
  16818.     BSR    InvertRange
  16819.     MOVE.W    LastSamPos(PC),D0
  16820.     MOVE.W    D0,MarkStart
  16821.     MOVE.W    D0,MarkEnd
  16822.     BSR    InvertRange
  16823.     BSR    MarkToOffset
  16824.     MOVE.L    MarkEndOfs(PC),SamplePos
  16825.     BSR    ShowPos
  16826. sprulop    BTST    #6,$BFE001
  16827.     BNE    spruend
  16828.     MOVE.W    MouseX(PC),D0
  16829.     CMP.W    #3,D0
  16830.     BLO    sprusk3
  16831.     CMP.W    #317,D0
  16832.     BHS    sprusk2
  16833.     BRA    sprusk4
  16834. sprusk2    MOVE.W    #316,D0
  16835.     BRA    sprusk4
  16836. sprusk3    MOVEQ    #3,D0
  16837. sprusk4    CMP.W    LastSamPos(PC),D0
  16838.     BEQ    sprulop
  16839.     MOVE.W    D0,LastSamPos
  16840.     BSR    InvertRange
  16841.     MOVE.W    LastSamPos(PC),MarkEnd
  16842.     BSR    InvertRange
  16843.     BSR    MarkToOffset
  16844.     MOVE.L    MarkEndOfs(PC),SamplePos
  16845.     BSR    ShowPos
  16846.     BRA    sprulop
  16847. spruend    MOVE.W    MarkStart(PC),D0
  16848.     MOVE.W    MarkEnd(PC),D1
  16849.     CMP.W    D0,D1
  16850.     BHS    MarkToOffset
  16851.     MOVE.W    D0,MarkEnd
  16852.     MOVE.W    D1,MarkStart
  16853.     BRA    MarkToOffset
  16854.  
  16855. InvertRange
  16856.     MOVE.W    MarkStart(PC),D4
  16857.     BEQ    Return2
  16858.     MOVE.W    MarkEnd(PC),D5
  16859.     MOVE.L    GfxBase(PC),A6
  16860.     JSR    LVOOwnBlitter(A6)
  16861.     JSR    LVOWaitBlit(A6)
  16862. invran3    MOVE.W    D4,D0
  16863.     MOVEQ    #0,D1
  16864.     MOVE.W    D4,D2
  16865.     MOVEQ    #64,D3
  16866.     BSR    DrawInvertLine
  16867.     CMP.W    D5,D4
  16868.     BEQ    invranx
  16869.     BHI    invran2
  16870.     ADDQ.W    #1,D4
  16871.     BRA    invran3
  16872. invran2    SUBQ.W    #1,D4
  16873.     BRA    invran3
  16874.  
  16875. invranx    MOVE.L    GfxBase(PC),A6
  16876.     JSR    LVODisownBlitter(A6)
  16877.     RTS
  16878.  
  16879. LoopStartPos    dc.w 0
  16880. LoopEndPos    dc.w 0
  16881.  
  16882. LoopStartDrag
  16883.     CLR.W    DragType
  16884. LopDrgLop
  16885.     MOVE.L    SongDataPtr(PC),A0
  16886.     MOVE.W    InsNum(PC),D0
  16887.     BEQ    Return2
  16888.     MULU    #30,D0
  16889.     LEA    12(A0,D0.W),A0
  16890.     MOVE.W    MouseX(PC),D0
  16891. lsdlop1    BTST    #6,$BFE001
  16892.     BNE    lsdexit
  16893.     MOVE.W    MouseX(PC),D1
  16894.     CMP.W    D0,D1
  16895.     BEQ.S    lsdlop1
  16896.     SUB.W    DragType,D1
  16897.     BPL.S    lsdmsk1
  16898.     MOVEQ    #0,D1
  16899. lsdmsk1    CMP.W    #314,D1
  16900.     BLO.S    lsdmsk2
  16901.     MOVE.W    #314,D1
  16902. lsdmsk2    MOVE.L    SamDisplay(PC),D0
  16903.     MULU    D0,D1
  16904.     DIVU    #314,D1
  16905.     MOVE.L    SamOffset(PC),D0
  16906.     ADD.W    D1,D0    ; new repeat
  16907.     BCLR    #0,D0
  16908.     MOVEQ    #0,D1
  16909.     MOVE.W    4(A0),D1 ; old repeat
  16910.     ADD.W    D1,D1
  16911.     TST.W    DragType
  16912.     BNE.S    drgrepl
  16913.     MOVE.W    D1,D3
  16914.     SUB.W    D1,D0    ; offset
  16915.     ADD.W    D0,D1
  16916.     MOVE.W    6(A0),D2
  16917.     ADD.W    D2,D2
  16918.     ADD.W    D2,D3
  16919.     SUBQ.W    #2,D3
  16920.     SUB.W    D0,D2
  16921.     CMP.W    D3,D1
  16922.     BLS.S    lsdok
  16923.     MOVE.W    D3,D1
  16924.     MOVEQ    #2,D2
  16925. lsdok    LSR.W    #1,D1
  16926.     MOVE.W    D1,4(A0)
  16927.     LSR.W    #1,D2
  16928.     MOVE.W    D2,6(A0)
  16929.     BSR.S    lsdexit
  16930.     BRA    LopDrgLop
  16931. lsdexit    BSR    ShowSampleInfo
  16932.     BSR    UpdateRepeats
  16933.     BRA    SetLoopSprites2
  16934.  
  16935. LoopEndDrag
  16936.     MOVE.W    #3,DragType
  16937.     BRA    LopDrgLop
  16938.  
  16939. drgrepl    MOVE.L    D0,D2 ; repend
  16940.     SUB.L    D1,D2 ; subtract repstart
  16941.     CMP.L    #2,D2
  16942.     BGT.S    ledskp1
  16943.     MOVEQ    #2,D2
  16944.     BRA.S    lsdok
  16945.  
  16946. ledskp1    MOVE.W    D1,D0 ; repeat
  16947.     ADD.W    D2,D0 ; + replen
  16948.     MOVE.W    (A0),D3
  16949.     ADD.W    D3,D3
  16950.     CMP.W    D3,D0
  16951.     BLS.S    lsdok
  16952.     SUB.W    D1,D3
  16953.     MOVE.W    D3,D2
  16954.     BRA.S    lsdok
  16955.  
  16956. DragType dc.w 0
  16957.  
  16958. SamDragBar
  16959.     CMP.W    #4,D0
  16960.     BLO    Return2
  16961.     CMP.W    #316,D0
  16962.     BHS    Return2
  16963.     CMP.W    DragStart(PC),D0
  16964.     BLO.S    draglo
  16965.     CMP.W    DragEnd(PC),D0
  16966.     BHI.S    draghi
  16967.     MOVE.W    MouseX(PC),D0
  16968.     MOVE.W    D0,D1
  16969.     SUB.W    DragStart(PC),D1
  16970.     MOVE.W    D1,SaveMX
  16971. sdrlop1    BTST    #6,$BFE001
  16972.     BNE    Return2
  16973.     MOVE.W    MouseX(PC),D1
  16974.     CMP.W    D0,D1
  16975.     BEQ.S    sdrlop1
  16976.     SUB.W    SaveMX(PC),D0
  16977.     SUBQ.W    #4,D0
  16978.     BPL.S    sdrskp1
  16979.     MOVEQ    #0,D0
  16980. sdrskp1    MOVE.L    SamLength(PC),D1
  16981.     BEQ    Return2
  16982.     MULU    D1,D0
  16983.     DIVU    #311,D0
  16984.     AND.L    #$FFFF,D0
  16985.     BSR    dragchk
  16986.     MOVE.W    MouseX(PC),D0
  16987.     BRA.S    sdrlop1
  16988.  
  16989. draglo    MOVE.L    SamOffset(PC),D0
  16990.     SUB.L    SamDisplay(PC),D0
  16991.     BPL.S    draglo2
  16992.     MOVEQ    #0,D0
  16993. draglo2    CMP.L    SamOffset(PC),D0
  16994.     BEQ    Return2
  16995.     MOVE.L    D0,SamOffset
  16996.     BRA    DisplaySample
  16997.  
  16998. draghi    MOVE.L    SamOffset(PC),D0
  16999.     ADD.L    SamDisplay(PC),D0
  17000. dragchk    MOVE.L    D0,D1
  17001.     ADD.L    SamDisplay(PC),D1
  17002.     CMP.L    SamLength(PC),D1
  17003.     BLS.S    draglo2
  17004.     MOVE.L    SamLength(PC),D0
  17005.     SUB.L    SamDisplay(PC),D0
  17006.     BRA.S    draglo2
  17007.  
  17008. SaveMX    dc.w    0
  17009.  
  17010. ;----
  17011.  
  17012. MarkToOffset
  17013.     MOVE.L    SamDisplay(PC),D0
  17014.     MOVE.W    MarkStart(PC),D1
  17015.     BEQ    Return2
  17016.     SUBQ.W    #3,D1
  17017.     MULU    D0,D1
  17018.     DIVU    #314,D1
  17019.     AND.L    #$FFFF,D1
  17020.     ADD.L    SamOffset(PC),D1
  17021.     MOVE.L    D1,MarkStartOfs
  17022.     MOVE.W    MarkEnd(PC),D1
  17023.     CMP.W    #316,D1
  17024.     BLO.S    mtosome
  17025.     MOVE.L    SamOffset(PC),D1
  17026.     ADD.L    D0,D1
  17027.     BRA.S    mtoexit
  17028. mtosome    SUBQ.W    #3,D1
  17029.     MULU    D0,D1
  17030.     DIVU    #314,D1
  17031.     AND.L    #$FFFF,D1
  17032.     ADD.L    SamOffset(PC),D1
  17033. mtoexit    MOVE.L    D1,MarkEndOfs
  17034.     RTS
  17035.  
  17036. OffsetToMark
  17037.     MOVE.L    MarkStartOfs(PC),D0
  17038.     BMI.S    otmout
  17039.     MOVE.W    #3,MarkStart
  17040.     SUB.L    SamOffset(PC),D0
  17041.     BMI.S    otmskip    ; set to start if before offset
  17042.     MULU    #314,D0
  17043.     MOVE.L    SamDisplay(PC),D1
  17044.     BEQ.S    otmskip
  17045.     DIVU    D1,D0
  17046.     CMP.W    #314,D0
  17047.     BHI.S    otmout    ; if start after display
  17048.     ADD.W    D0,MarkStart
  17049. otmskip    MOVE.W    #3,MarkEnd
  17050.     MOVE.L    MarkEndOfs(PC),D0
  17051.     SUB.L    SamOffset(PC),D0
  17052.     BMI.S    otmout    ; if end before offset
  17053.     MULU    #314,D0
  17054.     MOVE.L    SamDisplay(PC),D1
  17055.     BEQ    Return2
  17056.     DIVU    D1,D0
  17057.     CMP.W    #313,D0
  17058.     BLS.S    otmok
  17059.     MOVE.W    #313,D0    ; set to end if after display
  17060. otmok    ADD.W    D0,MarkEnd
  17061.     RTS
  17062.  
  17063. otmout    CLR.W    MarkStart
  17064.     RTS
  17065.  
  17066. SamScrEnable    dc.w    0
  17067. SamMemPtr    dc.l    0
  17068. SamMemSize    dc.l    0
  17069. LastSamPos    dc.w    0
  17070. MarkStart    dc.w    0
  17071. MarkEnd        dc.w    0
  17072. MarkStartOfs    dc.l    0
  17073. MarkEndOfs    dc.l    0
  17074.  
  17075. ;---- Sample graphing stuff ----
  17076.  
  17077. DisplaySample
  17078.     TST.W    SamScrEnable
  17079.     BEQ    Return2
  17080.     BSR    rdsdoit
  17081.     TST.L    MarkStartOfs
  17082.     BMI    Return2
  17083.     BSR    OffsetToMark
  17084.     BRA    InvertRange
  17085.  
  17086. RedrawSample
  17087.     TST.W    SamScrEnable
  17088.     BEQ    Return2
  17089.     MOVEQ    #-1,D0
  17090.     MOVE.L    D0,MarkStartOfs
  17091.     CLR.W    MarkStart
  17092.     MOVE.W    InsNum(PC),D0
  17093.     BEQ    rdsblnk
  17094.     LEA    SampleStarts(PC),A1
  17095.     SUBQ.W    #1,D0
  17096.     LSL.W    #2,D0
  17097.     MOVE.L    (A1,D0.W),SamStart
  17098.     BEQ    rdsblnk
  17099.     MOVE.L    124(A1,D0.W),D1
  17100.     BEQ    rdsblnk
  17101.     MOVE.L    D1,SamLength
  17102.     CLR.L    SamOffset
  17103.     MOVE.L    D1,SamDisplay
  17104.     BRA    rdsdoit
  17105. rdsblnk    LEA    BlankSample,A0
  17106.     MOVE.L    A0,SamStart
  17107.     MOVE.L    #314,SamLength
  17108.     CLR.L    SamOffset
  17109.     MOVE.L    #314,SamDisplay
  17110. rdsdoit    MOVE.L    GfxBase(PC),A6
  17111.     JSR    LVOOwnBlitter(A6)
  17112.     JSR    LVOWaitBlit(A6)
  17113.     BSR    ClearSamArea
  17114.     MOVE.L    SamStart(PC),A0
  17115.     MOVEQ    #0,D4
  17116.     MOVE.L    SamOffset(PC),D5
  17117.     MOVE.L    SamDisplay(PC),D6
  17118.     MOVE.L    D5,D7
  17119.     MOVE.L    A0,D0
  17120.     ADD.L    D5,D0
  17121.     MOVE.L    D0,SamDrawStart
  17122.     ADD.L    D6,D0
  17123.     MOVE.L    D0,SamDrawEnd
  17124. rdsloop    MOVE.W    D4,D0
  17125.     ADDQ.W    #3,D0
  17126.     MOVEQ    #127,D1
  17127.     SUB.B    (A0,D7.L),D1
  17128.     LSR.W    #2,D1
  17129.     TST.W    D4
  17130.     BNE    rdsdraw
  17131.     BSR    MoveTo
  17132.     BRA    rdsupdt
  17133. rdsdraw    BSR    DrawTo
  17134. rdsupdt    ADDQ.W    #1,D4
  17135.     MOVE.L    D4,D7
  17136.     MULU    D6,D7
  17137.     DIVU    #314,D7
  17138.     AND.L    #$FFFF,D7
  17139.     ADD.L    D5,D7
  17140.     CMP.W    #314,D4
  17141.     BLO    rdsloop
  17142.  
  17143.     MOVE.L    GfxBase(PC),A6
  17144.     JSR    LVODisownBlitter(A6)
  17145.     BSR.S    SetDragBar
  17146.     MOVE.L    SamDisplay(PC),D0
  17147.     LEA    BlankSample,A0
  17148.     CMP.L    SamStart,A0
  17149.     BNE.S    rdsslwo
  17150.     MOVEQ    #0,D0
  17151. rdsslwo    MOVE.W    #215*40+33,TextOffset
  17152.     BSR    Print6DecDigits
  17153.     BRA    SetLoopSprites
  17154.  
  17155. SamStart    dc.l    0
  17156. SamLength    dc.l    0
  17157. SamOffset    dc.l    0
  17158. SamDisplay    dc.l    0
  17159. SavSamIns    dc.w    0
  17160.  
  17161. SetDragBar
  17162.     MOVE.W    #4*10-1,D0
  17163.     MOVE.L    TextBplPtr,A0
  17164.     LEA    $15B8+2720(A0),A0
  17165.     MOVEQ    #0,D1
  17166. sdblop2    MOVE.L    D1,(A0)+
  17167.     DBRA    D0,sdblop2
  17168.     MOVE.L    SamLength(PC),D0
  17169.     BEQ    Return2
  17170.     MOVE.L    SamOffset(PC),D4
  17171.     MOVE.L    SamDisplay(PC),D5
  17172.     CMP.L    D0,D5
  17173.     BEQ    Return2
  17174.     ADD.L    D4,D5
  17175.     MULU    #311,D4
  17176.     DIVU    D0,D4
  17177.     ADDQ.W    #4,D4
  17178.     MOVE.W    D4,DragStart
  17179.     MULU    #311,D5
  17180.     DIVU    D0,D5
  17181.     ADDQ.W    #5,D5
  17182.     MOVE.W    D5,DragEnd
  17183.     MOVE.L    GfxBase(PC),A6
  17184.     JSR    LVOOwnBlitter(A6)
  17185.     JSR    LVOWaitBlit(A6)
  17186.     MOVEQ    #68,D6
  17187.     MOVEQ    #3,D7
  17188. sdbloop    MOVE.W    D4,D0
  17189.     MOVE.L    D6,D1
  17190.     MOVE.W    D5,D2
  17191.     MOVE.L    D6,D3
  17192.     BSR.S    DrawLine
  17193.     ADDQ.L    #1,D6
  17194.     DBRA    D7,sdbloop
  17195.     MOVE.L    GfxBase(PC),A6
  17196.     JSR    LVODisownBlitter(A6)
  17197.     RTS
  17198.  
  17199. DragStart    dc.w    0
  17200. DragEnd        dc.w    0
  17201.  
  17202. ;---- Line Routine ----
  17203.  
  17204. DrawInvertLine
  17205.     MOVE.B    #$48,MinTerm
  17206.     BSR.S    DrawLine
  17207.     MOVE.B    #$C8,Minterm
  17208.     RTS
  17209.  
  17210. MoveTo    MOVE.W    D0,PenX
  17211.     MOVE.W    D1,PenY
  17212.     RTS
  17213.  
  17214. DrawTo    MOVE.W    PenX(PC),D2
  17215.     MOVE.W    PenY(PC),D3
  17216.     MOVE.W    D0,PenX
  17217.     MOVE.W    D1,PenY
  17218. DrawLine
  17219.     MOVEM.L    D4-D7,-(SP)
  17220.     MOVEQ    #0,D4
  17221.     SUB.W    D1,D3
  17222.     BGE.S    dypos
  17223.     NEG.W    D3
  17224.     BRA.S    dyneg
  17225. dypos    BSET    #0,D4
  17226. dyneg    SUB.W    D0,D2
  17227.     BGE.S    dxpos
  17228.     NEG.W    D2
  17229.     BRA.S    dxneg
  17230. dxpos    BSET    #1,D4
  17231. dxneg    MOVE.W    D2,D5
  17232.     SUB.W    D3,D5
  17233.     BGE.S    dxdypos
  17234.     EXG    D2,D3
  17235.     BRA.S    dxdyneg
  17236. dxdypos    BSET    #2,D4
  17237. dxdyneg    MOVEQ    #0,D5
  17238.     ROR.W    #4,D0
  17239.     OR.W    #$0B00,D0
  17240.     MOVE.B    D0,D5
  17241.     MOVE.B    MinTerm(PC),D0
  17242.     LSL.W    #1,D5
  17243.     MULS    #ScrWidth,D1
  17244.     ADD.W    D5,D1
  17245.     ADD.L    LineScreen(PC),D1
  17246. blitrdy    BTST    #14,$DFF002 ; DMACONR
  17247.     BNE.S    blitrdy
  17248.     MOVE.W    $DFF01C,-(SP)
  17249.     BSET    #7,(SP)
  17250.     MOVE.W    #$7FFF,$DFF09A
  17251.     MOVE.B    Octants(PC,D4),D4
  17252.     ADD.L    D3,D3
  17253.     MOVE.W    D3,$DFF062 ; BLTBMOD
  17254.     SUB.W    D2,D3
  17255.     BGE.S    dldspos
  17256.     OR.B    #$40,D4
  17257. dldspos    MOVE.L    D3,$DFF050 ; BLTAPTR
  17258.     SUB.W    D2,D3
  17259.     MOVE.W    D3,$DFF064 ; BLTAMOD
  17260.     MOVE.W    D4,$DFF042 ; BLTCON1
  17261.     MOVE.W    D0,$DFF040 ; BLTCON0
  17262.     MOVE.L    D1,$DFF048 ; BLTCPTR
  17263.     MOVE.L    D1,$DFF054 ; BLTDPTR
  17264.     MOVE.W    #ScrWidth,$DFF060 ; BLTCMOD
  17265.     MOVE.W    #ScrWidth,$DFF066 ; BLTDMOD
  17266.     MOVE.W    #$8000,$DFF074 ; BLTADAT
  17267.     MOVE.W    #$FFFF,$DFF044 ; BLTAFWM
  17268.     MOVE.W    LinMask(PC),$DFF072 ; BLTBDAT
  17269.     ASL.W    #6,D2
  17270.     ADD.W    #2,D2
  17271.     MOVE.W    D2,$DFF058 ; BLTSIZE
  17272.     MOVE.W    (SP)+,$DFF09A
  17273.     MOVEM.L    (SP)+,D4-D7
  17274.     RTS
  17275.  
  17276. ScrWidth = 40
  17277.  
  17278. Octants    dc.b    3*4+1,2*4+1,1*4+1,0*4+1,7*4+1,5*4+1,6*4+1,4*4+1
  17279. LinMask    dc.w    $FFFF
  17280. MinTerm    dc.b    $C8 ;was $CA
  17281.     dc.b    0   ;free 0
  17282. PenX    dc.w    0
  17283. PenY    dc.w    0
  17284. LineScreen dc.l    0
  17285.  
  17286. ;---- Loop Sprites ----
  17287.  
  17288. SetLoopSprites
  17289.     MOVEQ    #-1,D6
  17290.     MOVEQ    #-1,D7
  17291.     MOVE.W    InsNum(PC),D0
  17292.     BEQ    slsset
  17293.     MULU    #30,D0
  17294.     MOVE.L    SongDataPtr(PC),A0
  17295.     LEA    12(A0,D0.W),A0
  17296. SetLoopSprites2
  17297.     TST.W    SamScrEnable
  17298.     BEQ    Return2
  17299.     CLR.W    LoopOnOffFlag
  17300.     MOVEQ    #-1,D6
  17301.     MOVEQ    #-1,D7
  17302.     MOVEQ    #0,D0
  17303.     MOVE.W    4(A0),D0
  17304.     ADD.L    D0,D0
  17305.     MOVEQ    #0,D1
  17306.     MOVE.W    6(A0),D1
  17307.     ADD.L    D1,D1
  17308.     MOVE.L    D0,D5
  17309.     ADD.L    D1,D5
  17310.     CMP.W    #2,D5
  17311.     BLS.S    slsset
  17312.     MOVE.W    #1,LoopOnOffFlag
  17313.     MOVE.L    SamOffset(PC),D2
  17314.     MOVE.L    SamDisplay(PC),D3
  17315.     MOVE.L    D2,D4
  17316.     ADD.L    D3,D4
  17317.     CMP.L    D2,D0
  17318.     BLO.S    1$
  17319.     CMP.L    D4,D0
  17320.     BHI.S    1$
  17321.     SUB.L    D2,D0
  17322.     MULU    #314,D0
  17323.     DIVU    D3,D0
  17324.     ADDQ.W    #3,D0
  17325.     MOVE.W    D0,D6
  17326. 1$    CMP.L    D2,D5
  17327.     BLO.S    slsset
  17328.     CMP.L    D4,D5
  17329.     BHI.S    slsset
  17330.     SUB.L    D2,D5
  17331.     MULU    #314,D5
  17332.     DIVU    D3,D5
  17333.     ADDQ.W    #6,D5
  17334.     MOVE.W    D5,D7
  17335. slsset    MOVE.W    #139,D1
  17336.     MOVE.W    D6,D0
  17337.     BPL.S    1$
  17338.     MOVEQ    #0,D0
  17339.     MOVE.W    #270,D1
  17340. 1$    MOVEQ    #64,D2
  17341.     LEA    LoopSpriteData1,A0
  17342.     MOVE.W    D0,LoopStartPos
  17343.     BSR    SetSpritePos
  17344.     MOVE.W    #139,D1
  17345.     MOVE.W    D7,D0
  17346.     BPL.S    2$
  17347.     MOVEQ    #0,D0
  17348.     MOVE.W    #270,D1
  17349. 2$    MOVEQ    #64,D2
  17350.     LEA    LoopSpriteData2,A0
  17351.     MOVE.W    D0,LoopEndPos
  17352.     BSR    SetSpritePos
  17353.     BRA    ShowLoopToggle
  17354.  
  17355. ;---- Playroutine ----
  17356.  
  17357. audchan1temp    dc.l    0,0,0,0,0,$00010000,0,  0,0,0,0
  17358. audchan2temp    dc.l    0,0,0,0,0,$00020000,0,  0,0,0,0
  17359. audchan3temp    dc.l    0,0,0,0,0,$00040000,0,  0,0,0,0
  17360. audchan4temp    dc.l    0,0,0,0,0,$00080000,0,  0,0,0,0
  17361.  
  17362. IntMusic
  17363.     MOVEM.L    D0-D7/A0-A6,-(SP)
  17364.     MOVE.L    RunMode(PC),D0
  17365.     BEQ    NoNewPositionYet
  17366.     CMP.L    #'patt',D0
  17367.     BEQ.S    1$
  17368.     MOVE.L    SongPosition(PC),CurrPos
  17369. 1$    MOVE.L    SongDataPtr(PC),A0
  17370.     MOVE.B    sd_numofpatt(A0),SongNumOfPatt+1
  17371.     TST.W    StepPlayEnable
  17372.     BNE.S    2$
  17373.     ADDQ.L    #1,Counter
  17374.     MOVE.L    Counter(PC),D0
  17375.     CMP.L    CurrSpeed(PC),D0
  17376.     BLO.S    NoNewNote
  17377. 2$    CLR.L    Counter
  17378.     TST.B    PattDelayTime2
  17379.     BEQ.S    GetNewNote
  17380.     BSR.S    NoNewAllChannels
  17381.     BRA    dskip
  17382.  
  17383. NoNewNote
  17384.     BSR.S    NoNewAllChannels
  17385.     BRA    NoNewPositionYet
  17386.  
  17387. NoNewAllChannels
  17388.     LEA    audchan1toggle,A4
  17389.     LEA    audchan1temp(PC),A6
  17390.     LEA    $DFF0A0,A5
  17391.     BSR    CheckEffects
  17392.     LEA    audchan2toggle,A4
  17393.     LEA    audchan2temp(PC),A6
  17394.     LEA    $DFF0B0,A5
  17395.     BSR    CheckEffects
  17396.     LEA    audchan3toggle,A4
  17397.     LEA    audchan3temp(PC),A6
  17398.     LEA    $DFF0C0,A5
  17399.     BSR    CheckEffects
  17400.     LEA    audchan4toggle,A4
  17401.     LEA    audchan4temp(PC),A6
  17402.     LEA    $DFF0D0,A5
  17403.     BRA    CheckEffects
  17404.  
  17405.  
  17406. GetNewNote
  17407.     LEA    12(A0),A3
  17408.     LEA    sd_pattpos(A0),A2
  17409.     LEA    sd_patterndata(A0),A0
  17410.     MOVEQ    #0,D1
  17411.     MOVE.L    SongPosition(PC),D0
  17412.     MOVE.B    (A2,D0.W),D1
  17413.  
  17414.     CMP.L    #'patt',RunMode
  17415.     BNE.S    1$
  17416.     MOVE.L    PatternNumber(PC),D1
  17417. 1$    ASL.L    #8,D1
  17418.  
  17419.     ASL.L    #2,D1
  17420.     ADD.L    PatternPosition(PC),D1
  17421.     MOVE.L    D1,PatternPtr
  17422.     CLR.W    DMACONtemp
  17423.     LEA    audchan1toggle,A4
  17424.     LEA    $DFF0A0,A5
  17425.     LEA    audchan1temp(PC),A6
  17426.     MOVEQ    #1,D2
  17427.     BSR    PlayVoice
  17428.     MOVEQ    #0,D0
  17429.     MOVE.B    n_volume(A6),D0
  17430.     MOVE.W    D0,8(A5)
  17431.     LEA    audchan2toggle,A4
  17432.     LEA    $DFF0B0,A5
  17433.     LEA    audchan2temp(PC),A6
  17434.     MOVEQ    #2,D2
  17435.     BSR.S    PlayVoice
  17436.     MOVEQ    #0,D0
  17437.     MOVE.B    n_volume(A6),D0
  17438.     MOVE.W    D0,8(A5)
  17439.     LEA    audchan3toggle,A4
  17440.     LEA    $DFF0C0,A5
  17441.     LEA    audchan3temp(PC),A6
  17442.     MOVEQ    #3,D2
  17443.     BSR.S    PlayVoice
  17444.     MOVEQ    #0,D0
  17445.     MOVE.B    n_volume(A6),D0
  17446.     MOVE.W    D0,8(A5)
  17447.     LEA    audchan4toggle,A4
  17448.     LEA    $DFF0D0,A5
  17449.     LEA    audchan4temp(PC),A6
  17450.     MOVEQ    #4,D2
  17451.     BSR.S    PlayVoice
  17452.     MOVEQ    #0,D0
  17453.     MOVE.B    n_volume(A6),D0
  17454.     MOVE.W    D0,8(A5)
  17455.     BRA    SetDMA
  17456.  
  17457. CheckMetronome
  17458.     CMP.B    MetroChannel,D2
  17459.     BNE    Return2
  17460.     MOVE.B    MetroSpeed,D2
  17461.     BEQ    Return2
  17462.     MOVE.L    PatternPosition,D3
  17463.     LSR.L    #4,D3
  17464.     DIVU    D2,D3
  17465.     SWAP    D3
  17466.     TST.W    D3
  17467.     BNE    Return2
  17468.     AND.L    #$00000FFF,(A6)
  17469.     OR.L    #$10D6F000,(A6) ; Play sample $1F at period $0D6 (214)
  17470.     RTS
  17471.  
  17472. PlayVoice
  17473.     TST.L    (A6)
  17474.     BNE.S    plvskip
  17475.     BSR    PerNop
  17476. plvskip    MOVE.L    (A0,D1.L),(A6)    ; Read note from pattern
  17477.     BSR.S    CheckMetronome
  17478.     ADDQ.L    #4,D1
  17479.     MOVEQ    #0,D2
  17480.     MOVE.B    n_cmd(A6),D2    ; Get lower 4 bits of instrument
  17481.     AND.B    #$F0,D2
  17482.     LSR.B    #4,D2
  17483.     MOVE.B    (A6),D0        ; Get higher 4 bits of instrument
  17484.     AND.B    #$F0,D0
  17485.     OR.B    D0,D2
  17486.     TST.B    D2
  17487.     BEQ    SetRegisters    ; Instrument was zero
  17488.     MOVEQ    #0,D3
  17489.     LEA    SampleStarts(PC),A1
  17490.     MOVE    D2,D4
  17491.     MOVE.B    D2,n_samplenum(A6)
  17492.     SUBQ.L    #1,D2
  17493.     LSL.L    #2,D2
  17494.     MULU    #30,D4
  17495.     MOVE.L    (A1,D2.L),n_start(A6)
  17496.     MOVE.W    (A3,D4.L),n_length(A6)
  17497.     MOVE.W    (A3,D4.L),n_reallength(A6)
  17498.     MOVE.B    2(A3,D4.L),n_finetune(A6)
  17499.     MOVE.B    3(A3,D4.L),n_volume(A6)
  17500.     MOVE.W    4(A3,D4.L),D3 ; Get repeat
  17501.     TST.W    D3
  17502.     BEQ.S    NoLoop
  17503.     MOVE.L    n_start(A6),D2    ; Get start
  17504.     ASL.W    #1,D3
  17505.     ADD.L    D3,D2        ; Add repeat
  17506.     MOVE.L    D2,n_loopstart(A6)
  17507.     MOVE.L    D2,n_wavestart(A6)
  17508.     MOVE.W    4(A3,D4.L),D0    ; Get repeat
  17509.     ADD.W    6(A3,D4.L),D0    ; Add replen
  17510.     MOVE.W    D0,n_length(A6)
  17511.     MOVE.W    6(A3,D4.L),n_replen(A6)    ; Save replen
  17512.     BRA.S    SetRegisters
  17513.  
  17514. NoLoop    MOVE.L    n_start(A6),D2
  17515.     ADD.L    D3,D2
  17516.     MOVE.L    D2,n_loopstart(A6)
  17517.     MOVE.L    D2,n_wavestart(A6)
  17518.     MOVE.W    6(A3,D4.L),n_replen(A6)    ; Save replen
  17519. SetRegisters
  17520.     MOVE.W    (A6),D0
  17521.     AND.W    #$0FFF,D0
  17522.     BEQ    CheckMoreEffects    ; If no note
  17523.     MOVE.W    2(A6),D0
  17524.     AND.W    #$0FF0,D0
  17525.     CMP.W    #$0E50,D0 ; finetune
  17526.     BEQ.S    DoSetFineTune
  17527.     MOVE.B    2(A6),D0
  17528.     AND.B    #$0F,D0
  17529.     CMP.B    #3,D0    ; TonePortamento
  17530.     BEQ.S    ChkTonePorta
  17531.     CMP.B    #5,D0    ; TonePortamento + VolSlide
  17532.     BEQ.S    ChkTonePorta
  17533.     CMP.B    #9,D0    ; Sample Offset
  17534.     BNE.S    SetPeriod
  17535.     BSR    CheckMoreEffects
  17536.     BRA.S    SetPeriod
  17537.  
  17538. DoSetFineTune
  17539.     BSR    SetFineTune
  17540.     BRA.S    SetPeriod
  17541.  
  17542. ChkTonePorta
  17543.     BSR    SetTonePorta
  17544.     BRA    CheckMoreEffects
  17545.  
  17546. SetPeriod
  17547.     MOVEM.L    D0-D1/A0-A1,-(SP)
  17548.     MOVE.W    (A6),D1
  17549.     AND.W    #$0FFF,D1
  17550.     LEA    PeriodTable(PC),A1
  17551.     MOVEQ    #0,D0
  17552.     MOVEQ    #$24,D7
  17553. ftuloop    CMP.W    (A1,D0.W),D1
  17554.     BHS    ftufound
  17555.     ADDQ.L    #2,D0
  17556.     DBRA    D7,ftuloop
  17557. ftufound
  17558.     MOVEQ    #0,D1
  17559.     MOVE.B    n_finetune(A6),D1
  17560.     MULU    #37*2,D1
  17561.     ADD.L    D1,A1
  17562.     MOVE.W    (A1,D0.W),n_period(A6)
  17563.     MOVEM.L    (SP)+,D0-D1/A0-A1
  17564.  
  17565.     MOVE.W    2(A6),D0
  17566.     AND.W    #$0FF0,D0
  17567.     CMP.W    #$0ED0,D0
  17568.     BEQ    CheckMoreEffects
  17569.  
  17570.     MOVE.W    n_dmabit(A6),$DFF096
  17571.     BTST    #2,n_wavecontrol(A6)
  17572.     BNE    vibnoc
  17573.     CLR.B    n_vibratopos(A6)
  17574. vibnoc    BTST    #6,n_wavecontrol(A6)
  17575.     BNE    trenoc
  17576.     CLR.B    n_tremolopos(A6)
  17577. trenoc    MOVE.W    n_length(A6),4(A5)    ; Set length
  17578.     MOVE.L    n_start(A6),(A5)    ; Set start
  17579.     BNE    sdmaskp
  17580.     CLR.L    n_loopstart(A6)
  17581.     MOVEQ    #1,D0
  17582.     MOVE.W    D0,4(A5)
  17583.     MOVE.W    D0,n_replen(A6)
  17584. sdmaskp    MOVE.W    n_period(A6),D0
  17585.     MOVE.W    D0,6(A5)        ; Set period
  17586.     JSR    SpectrumAnalyzer    ; Do the analyzer
  17587.     ST    n_trigger(A6)
  17588.     MOVE.W    n_dmabit(A6),D0
  17589.     OR.W    D0,DMACONtemp
  17590.     BRA    CheckMoreEffects
  17591.  
  17592. SetDMA    MOVE.W    DMAWait,D0
  17593. WaitDMA    DBRA    D0,WaitDMA
  17594.     MOVE.W    DMACONtemp,D0
  17595.     AND.W    ActiveChannels,D0
  17596.     OR.W    #$8000,D0
  17597.     MOVE.W    D0,$DFF096
  17598.     MOVE.W    DMAWait,D0
  17599. WaitDMA2
  17600.     DBRA    D0,WaitDMA2
  17601.     LEA    $DFF000,A5
  17602.     LEA    audchan4temp(PC),A6
  17603.     MOVE.L    n_loopstart(A6),$D0(A5)
  17604.     MOVE.W    n_replen(A6),$D4(A5)
  17605.     LEA    audchan3temp(PC),A6
  17606.     MOVE.L    n_loopstart(A6),$C0(A5)
  17607.     MOVE.W    n_replen(A6),$C4(A5)
  17608.     LEA    audchan2temp(PC),A6
  17609.     MOVE.L    n_loopstart(A6),$B0(A5)
  17610.     MOVE.W    n_replen(A6),$B4(A5)
  17611.     LEA    audchan1temp(PC),A6
  17612.     MOVE.L    n_loopstart(A6),$A0(A5)
  17613.     MOVE.W    n_replen(A6),$A4(A5)
  17614.  
  17615. dskip    TST.L    RunMode
  17616.     BEQ    dskipx
  17617.     BSR    SetPatternPos
  17618. dskipx    MOVE.L    PatternPosition(PC),D0
  17619.     LSR.L    #4,D0
  17620.     MOVE.W    D0,ScrPattPos
  17621.     ADD.L    #16,PatternPosition
  17622.     MOVE.B    PattDelayTime,D0
  17623.     BEQ    dskpc
  17624.     MOVE.B    D0,PattDelayTime2
  17625.     CLR.B    PattDelayTime
  17626. dskpc    TST.B    PattDelayTime2
  17627.     BEQ    dskpa
  17628.     SUBQ.B    #1,PattDelayTime2
  17629.     BEQ    dskpa
  17630.     SUB.L    #16,PatternPosition
  17631. dskpa    TST.B    PBreakFlag
  17632.     BEQ    nnpysk
  17633.     SF    PBreakFlag
  17634.     MOVEQ    #0,D0
  17635.     MOVE.B    PBreakPosition(PC),D0
  17636.     LSL.W    #4,D0
  17637.     MOVE.L    D0,PatternPosition
  17638.     CLR.B    PBreakPosition
  17639. nnpysk    TST.W    StepPlayEnable
  17640.     BEQ    nnpysk2
  17641.     BSR    DoStopIt
  17642.     CLR.W    StepPlayEnable
  17643.     MOVE.L    PatternPosition(PC),D0
  17644.     LSR.L    #4,D0
  17645.     AND.W    #63,D0
  17646.     MOVE.W    D0,ScrPattPos
  17647. nnpysk2    CMP.L    #1024,PatternPosition
  17648.     BNE    NoNewPositionYet
  17649. NextPosition    
  17650.     MOVEQ    #0,D0
  17651.     MOVE.B    PBreakPosition(PC),D0
  17652.     LSL.W    #4,D0
  17653.     MOVE.L    D0,PatternPosition
  17654.     CLR.B    PBreakPosition
  17655.     CLR.B    PosJumpAssert
  17656.     CMP.L    #'patp',RunMode
  17657.     BNE    NoNewPositionYet
  17658.     ADDQ.L    #1,SongPosition
  17659.     AND.L    #$7F,SongPosition
  17660.     MOVE.L    SongPosition(PC),D1
  17661.     MOVE.L    SongDataPtr(PC),A0
  17662.     CMP.B    sd_numofpatt(A0),D1
  17663.     BLO    NoNewPositionYet
  17664.     CLR.L    SongPosition
  17665.  
  17666.     TST.W    StepPlayEnable
  17667.     BEQ    NoNewPositionYet
  17668.     BSR    DoStopIt
  17669.     CLR.W    StepPlayEnable
  17670.     MOVE.L    PatternPosition(PC),D0
  17671.     LSR.L    #4,D0
  17672.     MOVE.W    D0,ScrPattPos
  17673.  
  17674. NoNewPositionYet
  17675.     TST.B    PosJumpAssert
  17676.     BNE    NextPosition
  17677.     MOVEM.L    (SP)+,D0-D7/A0-A6
  17678.     RTS
  17679.  
  17680. CheckEffects
  17681.     TST.W    (A4)
  17682.     BEQ    Return2
  17683.     BSR    chkefx2
  17684.     MOVEQ    #0,D0
  17685.     MOVE.B    n_volume(A6),D0
  17686.     MOVE.W    D0,8(A5)
  17687.     RTS
  17688.  
  17689. chkefx2    BSR    UpdateFunk
  17690.     MOVE.W    n_cmd(A6),D0
  17691.     AND.W    #$0FFF,D0
  17692.     BEQ    Return2
  17693.     MOVE.B    n_cmd(A6),D0
  17694.     AND.B    #$0F,D0
  17695.     TST.B    D0
  17696.     BEQ    Arpeggio
  17697.     CMP.B    #1,D0
  17698.     BEQ    PortaUp
  17699.     CMP.B    #2,D0
  17700.     BEQ    PortaDown
  17701.     CMP.B    #3,D0
  17702.     BEQ    TonePortamento
  17703.     CMP.B    #4,D0
  17704.     BEQ    Vibrato
  17705.     CMP.B    #5,D0
  17706.     BEQ    TonePlusVolSlide
  17707.     CMP.B    #6,D0
  17708.     BEQ    VibratoPlusVolSlide
  17709.     CMP.B    #$E,D0
  17710.     BEQ    E_Commands
  17711. SetBack    MOVE.W    n_period(A6),6(A5)
  17712.     CMP.B    #7,D0
  17713.     BEQ    Tremolo
  17714.     CMP.B    #$A,D0
  17715.     BEQ    VolumeSlide
  17716. Return2    RTS
  17717.  
  17718. PerNop    MOVE.W    n_period(A6),6(A5)
  17719.     RTS
  17720.  
  17721. Arpeggio
  17722.     MOVEQ    #0,D0
  17723.     MOVE.L    Counter(PC),D0
  17724.     DIVS    #3,D0
  17725.     SWAP    D0
  17726.     CMP.W    #1,D0
  17727.     BEQ    Arpeggio1
  17728.     CMP.W    #2,D0
  17729.     BEQ    Arpeggio2
  17730. Arpeggio0
  17731.     MOVE.W    n_period(A6),D2
  17732.     BRA    ArpeggioSet
  17733.  
  17734. Arpeggio1
  17735.     MOVEQ    #0,D0
  17736.     MOVE.B    n_cmdlo(A6),D0
  17737.     LSR.B    #4,D0
  17738.     BRA    ArpeggioFind
  17739.  
  17740. Arpeggio2
  17741.     MOVEQ    #0,D0
  17742.     MOVE.B    n_cmdlo(A6),D0
  17743.     AND.B    #15,D0
  17744. ArpeggioFind
  17745.     ASL.W    #1,D0
  17746.     MOVEQ    #0,D1
  17747.     MOVE.B    n_finetune(A6),D1
  17748.     MULU    #37*2,D1
  17749.     LEA    PeriodTable(PC),A0
  17750.     ADD.L    D1,A0
  17751.     MOVEQ    #0,D1
  17752.     MOVE.W    n_period(A6),D1
  17753.     MOVEQ    #$24,D7
  17754. arploop    MOVE.W    (A0,D0.W),D2
  17755.     CMP.W    (A0),D1
  17756.     BHS    ArpeggioSet
  17757.     ADDQ.L    #2,A0
  17758.     DBRA    D7,arploop
  17759.     RTS
  17760.  
  17761. ArpeggioSet
  17762.     MOVE.W    D2,6(A5)
  17763.     RTS
  17764.  
  17765. FinePortaUp
  17766.     TST.L    Counter
  17767.     BNE    Return2
  17768.     MOVE.B    #$0F,LowMask
  17769. PortaUp    MOVEQ    #0,D0
  17770.     MOVE.B    n_cmdlo(A6),D0
  17771.     AND.B    LowMask,D0
  17772.     MOVE.B    #$FF,LowMask
  17773.     SUB.W    D0,n_period(A6)
  17774.     MOVE.W    n_period(A6),D0
  17775.     AND.W    #$0FFF,D0
  17776.     CMP.W    #$0071,D0
  17777.     BPL    PortaUskip
  17778.     AND.W    #$F000,n_period(A6)
  17779.     OR.W    #$0071,n_period(A6)
  17780. PortaUskip    MOVE.W    n_period(A6),D0
  17781.     AND.W    #$0FFF,D0
  17782.     MOVE.W    D0,6(A5)
  17783.     RTS
  17784.  
  17785. FinePortaDown
  17786.     TST.L    Counter
  17787.     BNE    Return2
  17788.     MOVE.B    #$0F,LowMask
  17789. PortaDown
  17790.     CLR.W    D0
  17791.     MOVE.B    n_cmdlo(A6),D0
  17792.     AND.B    LowMask,D0
  17793.     MOVE.B    #$FF,LowMask
  17794.     ADD.W    D0,n_period(A6)
  17795.     MOVE.W    n_period(A6),D0
  17796.     AND.W    #$0FFF,D0
  17797.     CMP.W    #$0358,D0
  17798.     BMI    PortaDskip
  17799.     AND.W    #$F000,n_period(A6)
  17800.     OR.W    #$0358,n_period(A6)
  17801. PortaDskip    MOVE.W    n_period(A6),D0
  17802.     AND.W    #$0FFF,D0
  17803.     MOVE.W    D0,6(A5)
  17804.     RTS
  17805.  
  17806. SetTonePorta
  17807.     MOVE.L    A0,-(SP)
  17808.     MOVE.W    (A6),D2
  17809.     AND.W    #$0FFF,D2
  17810.     MOVEQ    #0,D0
  17811.     MOVE.B    n_finetune(A6),D0
  17812.     MULU    #37*2,D0
  17813.     LEA    PeriodTable(PC),A0
  17814.     ADD.L    D0,A0
  17815.     MOVEQ    #0,D0
  17816. StpLoop    CMP.W    (A0,D0.W),D2
  17817.     BHS    StpFound
  17818.     ADDQ.W    #2,D0
  17819.     CMP.W    #37*2,D0
  17820.     BLO    StpLoop
  17821.     MOVEQ    #35*2,D0
  17822. StpFound
  17823.     MOVE.B    n_finetune(A6),D2
  17824.     AND.B    #8,D2
  17825.     BEQ    StpGoss
  17826.     TST.W    D0
  17827.     BEQ    StpGoss
  17828.     SUBQ.W    #2,D0
  17829. StpGoss    MOVE.W    (A0,D0.W),D2
  17830.     MOVE.L    (SP)+,A0
  17831.     MOVE.W    D2,n_wantedperiod(A6)
  17832.     MOVE.W    n_period(A6),D0
  17833.     CLR.B    n_toneportdirec(A6)
  17834.     CMP.W    D0,D2
  17835.     BEQ    ClearTonePorta
  17836.     BGE    Return2
  17837.     MOVE.B    #1,n_toneportdirec(A6)
  17838.     RTS
  17839.  
  17840. ClearTonePorta
  17841.     CLR.W    n_wantedperiod(A6)
  17842.     RTS    
  17843.  
  17844.  
  17845. TonePortamento
  17846.     MOVE.B    n_cmdlo(A6),D0
  17847.     BEQ    TonePortNoChange
  17848.     MOVE.B    D0,n_toneportspeed(A6)
  17849.     CLR.B    n_cmdlo(A6)
  17850. TonePortNoChange
  17851.     TST.W    n_wantedperiod(A6)
  17852.     BEQ    Return2
  17853.     MOVEQ    #0,D0
  17854.     MOVE.B    n_toneportspeed(A6),D0
  17855.     TST.B    n_toneportdirec(A6)
  17856.     BNE    TonePortaUp
  17857. TonePortaDown
  17858.     ADD.W    D0,n_period(A6)
  17859.     MOVE.W    n_wantedperiod(A6),D0
  17860.     CMP.W    n_period(A6),D0
  17861.     BGT    TonePortaSetPer
  17862.     MOVE.W    n_wantedperiod(A6),n_period(A6)
  17863.     CLR.W    n_wantedperiod(A6)
  17864.     BRA    TonePortaSetPer
  17865.  
  17866. TonePortaUp
  17867.     SUB.W    D0,n_period(A6)
  17868.     MOVE.W    n_wantedperiod(A6),D0
  17869.     CMP.W    n_period(A6),D0
  17870.     BLT    TonePortaSetPer
  17871.     MOVE.W    n_wantedperiod(A6),n_period(A6)
  17872.     CLR.W    n_wantedperiod(A6)
  17873.  
  17874. TonePortaSetPer
  17875.     MOVE.W    n_period(A6),D2
  17876.     MOVE.B    n_glissfunk(A6),D0
  17877.     AND.B    #$0F,D0
  17878.     BEQ    GlissSkip
  17879.     MOVEQ    #0,D0
  17880.     MOVE.B    n_finetune(A6),D0
  17881.     MULU    #37*2,D0
  17882.     LEA    PeriodTable(PC),A0
  17883.     ADD.L    D0,A0
  17884.     MOVEQ    #0,D0
  17885. GlissLoop
  17886.     CMP.W    (A0,D0.W),D2
  17887.     BHS    GlissFound
  17888.     ADDQ.W    #2,D0
  17889.     CMP.W    #37*2,D0
  17890.     BLO    GlissLoop
  17891.     MOVEQ    #35*2,D0
  17892. GlissFound
  17893.     MOVE.W    (A0,D0.W),D2
  17894. GlissSkip
  17895.     MOVE.W    D2,6(A5) ; Set period
  17896.     RTS
  17897.  
  17898. Vibrato    MOVE.B    n_cmdlo(A6),D0
  17899.     BEQ    Vibrato2
  17900.     MOVE.B    n_vibratocmd(A6),D2
  17901.     AND.B    #$0F,D0
  17902.     BEQ    vibskip
  17903.     AND.B    #$F0,D2
  17904.     OR.B    D0,D2
  17905. vibskip    MOVE.B    n_cmdlo(A6),D0
  17906.     AND.B    #$F0,D0
  17907.     BEQ    vibskip2
  17908.     AND.B    #$0F,D2
  17909.     OR.B    D0,D2
  17910. vibskip2
  17911.     MOVE.B    D2,n_vibratocmd(A6)
  17912. Vibrato2
  17913.     MOVE.L    A4,-(SP)
  17914.     MOVE.B    n_vibratopos(A6),D0
  17915.     LEA    VibratoTable(PC),A4
  17916.     LSR.W    #2,D0
  17917.     AND.W    #$001F,D0
  17918.     MOVEQ    #0,D2
  17919.     MOVE.B    n_wavecontrol(A6),D2
  17920.     AND.B    #$03,D2
  17921.     BEQ    vib_sine
  17922.     LSL.B    #3,D0
  17923.     CMP.B    #1,D2
  17924.     BEQ    vib_rampdown
  17925.     MOVE.B    #255,D2
  17926.     BRA    vib_set
  17927. vib_rampdown
  17928.     TST.B    n_vibratopos(A6)
  17929.     BPL    vib_rampdown2
  17930.     MOVE.B    #255,D2
  17931.     SUB.B    D0,D2
  17932.     BRA    vib_set
  17933. vib_rampdown2
  17934.     MOVE.B    D0,D2
  17935.     BRA    vib_set
  17936. vib_sine
  17937.     MOVE.B    0(A4,D0.W),D2
  17938. vib_set
  17939.     MOVE.B    n_vibratocmd(A6),D0
  17940.     AND.W    #15,D0
  17941.     MULU    D0,D2
  17942.     LSR.W    #7,D2
  17943.     MOVE.W    n_period(A6),D0
  17944.     TST.B    n_vibratopos(A6)
  17945.     BMI    VibratoNeg
  17946.     ADD.W    D2,D0
  17947.     BRA    Vibrato3
  17948. VibratoNeg
  17949.     SUB.W    D2,D0
  17950. Vibrato3
  17951.     MOVE.W    D0,6(A5)
  17952.     MOVE.B    n_vibratocmd(A6),D0
  17953.     LSR.W    #2,D0
  17954.     AND.W    #$003C,D0
  17955.     ADD.B    D0,n_vibratopos(A6)
  17956.     MOVE.L    (SP)+,A4
  17957.     RTS
  17958.  
  17959. TonePlusVolSlide
  17960.     BSR    TonePortNoChange
  17961.     BRA    VolumeSlide
  17962.  
  17963. VibratoPlusVolSlide
  17964.     BSR    Vibrato2
  17965.     BRA    VolumeSlide
  17966.  
  17967. Tremolo    MOVE.L    A4,-(SP)
  17968.     MOVE.B    n_cmdlo(A6),D0
  17969.     BEQ    Tremolo2
  17970.     MOVE.B    n_tremolocmd(A6),D2
  17971.     AND.B    #$0F,D0
  17972.     BEQ    treskip
  17973.     AND.B    #$F0,D2
  17974.     OR.B    D0,D2
  17975. treskip    MOVE.B    n_cmdlo(A6),D0
  17976.     AND.B    #$F0,D0
  17977.     BEQ    treskip2
  17978.     AND.B    #$0F,D2
  17979.     OR.B    D0,D2
  17980. treskip2
  17981.     MOVE.B    D2,n_tremolocmd(A6)
  17982. Tremolo2
  17983.     MOVE.B    n_tremolopos(A6),D0
  17984.     LEA    VibratoTable(PC),A4
  17985.     LSR.W    #2,D0
  17986.     AND.W    #$001F,D0
  17987.     MOVEQ    #0,D2
  17988.     MOVE.B    n_wavecontrol(A6),D2
  17989.     LSR.B    #4,D2
  17990.     AND.B    #$03,D2
  17991.     BEQ    tre_sine
  17992.     LSL.B    #3,D0
  17993.     CMP.B    #1,D2
  17994.     BEQ    tre_rampdown
  17995.     MOVE.B    #255,D2
  17996.     BRA    tre_set
  17997. tre_rampdown
  17998.     TST.B    n_vibratopos(A6)
  17999.     BPL    tre_rampdown2
  18000.     MOVE.B    #255,D2
  18001.     SUB.B    D0,D2
  18002.     BRA    tre_set
  18003. tre_rampdown2
  18004.     MOVE.B    D0,D2
  18005.     BRA    tre_set
  18006. tre_sine
  18007.     MOVE.B    0(A4,D0.W),D2
  18008. tre_set
  18009.     MOVE.B    n_tremolocmd(A6),D0
  18010.     AND.W    #15,D0
  18011.     MULU    D0,D2
  18012.     LSR.W    #6,D2
  18013.     MOVEQ    #0,D0
  18014.     MOVE.B    n_volume(A6),D0
  18015.     TST.B    n_tremolopos(A6)
  18016.     BMI    TremoloNeg
  18017.     ADD.W    D2,D0
  18018.     BRA    Tremolo3
  18019. TremoloNeg
  18020.     SUB.W    D2,D0
  18021. Tremolo3
  18022.     BPL    TremoloSkip
  18023.     CLR.W    D0
  18024. TremoloSkip
  18025.     CMP.W    #$40,D0
  18026.     BLS    TremoloOk
  18027.     MOVE.W    #$40,D0
  18028. TremoloOk
  18029.     MOVE.W    D0,8(A5)
  18030.     MOVE.B    n_tremolocmd(A6),D0
  18031.     LSR.W    #2,D0
  18032.     AND.W    #$003C,D0
  18033.     ADD.B    D0,n_tremolopos(A6)
  18034.     MOVE.L    (SP)+,A4
  18035.     ADDQ.L    #4,SP
  18036.     RTS
  18037.  
  18038. SampleOffset
  18039.     MOVEQ    #0,D0
  18040.     MOVE.B    n_cmdlo(A6),D0
  18041.     BEQ    sononew
  18042.     MOVE.B    D0,n_sampleoffset(A6)
  18043. sononew    MOVE.B    n_sampleoffset(A6),D0
  18044.     LSL.W    #7,D0
  18045.     CMP.W    n_length(A6),D0
  18046.     BGE    sofskip
  18047.     SUB.W    D0,n_length(A6)
  18048.     LSL.W    #1,D0
  18049.     ADD.L    D0,n_start(A6)
  18050.     RTS
  18051. sofskip MOVE.W    #$0001,n_length(A6)
  18052.     RTS
  18053.  
  18054. VolumeSlide
  18055.     MOVEQ    #0,D0
  18056.     MOVE.B    n_cmdlo(A6),D0
  18057.     LSR.B    #4,D0
  18058.     TST.B    D0
  18059.     BEQ    VolSlideDown
  18060. VolSlideUp
  18061.     ADD.B    D0,n_volume(A6)
  18062.     CMP.B    #$40,n_volume(A6)
  18063.     BMI    vsuskip
  18064.     MOVE.B    #$40,n_volume(A6)
  18065. vsuskip    MOVE.B    n_volume(A6),D0
  18066. ;    MOVE.W    D0,8(A5)
  18067.     RTS
  18068.  
  18069. VolSlideDown
  18070.     MOVEQ    #0,D0
  18071.     MOVE.B    n_cmdlo(A6),D0
  18072.     AND.B    #$0F,D0
  18073. VolSlideDown2
  18074.     SUB.B    D0,n_volume(A6)
  18075.     BPL    vsdskip
  18076.     CLR.B    n_volume(A6)
  18077. vsdskip    MOVE.B    n_volume(A6),D0
  18078. ;    MOVE.W    D0,8(A5)
  18079.     RTS
  18080.  
  18081. PositionJump
  18082.     MOVEQ    #0,D0
  18083.     MOVE.B    n_cmdlo(A6),D0
  18084.     SUBQ.B    #1,D0
  18085.     MOVE.L    D0,SongPosition
  18086. pj2    CLR.B    PBreakPosition
  18087.     ST     PosJumpAssert
  18088.     RTS
  18089.  
  18090. VolumeChange
  18091.     MOVEQ    #0,D0
  18092.     MOVE.B    n_cmdlo(A6),D0
  18093.     CMP.B    #$40,D0
  18094.     BLS    VolumeOk
  18095.     MOVEQ    #$40,D0
  18096. VolumeOk
  18097.     MOVE.B    D0,n_volume(A6)
  18098. ;    MOVE.W    D0,8(A5)
  18099.     RTS
  18100.  
  18101. PatternBreak
  18102.     MOVEQ    #0,D0
  18103.     MOVE.B    n_cmdlo(A6),D0
  18104.     MOVE.L    D0,D2
  18105.     LSR.B    #4,D0
  18106.     MULU    #10,D0
  18107.     AND.B    #$0F,D2
  18108.     ADD.B    D2,D0
  18109.     CMP.B    #63,D0
  18110.     BHI    pj2
  18111.     MOVE.B    D0,PBreakPosition
  18112.     ST    PosJumpAssert
  18113.     RTS
  18114.  
  18115. SetSpeed
  18116.     MOVE.B    3(A6),D0
  18117.     AND.W    #$FF,D0
  18118.     BEQ.S    SpeedNull
  18119.     TST.B    IntMode
  18120.     BEQ.S    normspd
  18121.     CMP.W    #32,D0
  18122.     BLO.S    normspd
  18123.     MOVE.W    D0,RealTempo
  18124.     MOVEM.L    D0-D7/A0-A6,-(SP)
  18125.     MOVE.W    SamScrEnable,-(SP)
  18126.     ST    SamScrEnable
  18127.     ST    UpdateTempo
  18128.     JSR    SetTempo
  18129.     MOVE.W    (SP)+,SamScrEnable
  18130.     MOVEM.L    (SP)+,D0-D7/A0-A6
  18131.     RTS
  18132. normspd    CLR.L    Counter
  18133.     MOVE.W    D0,CurrSpeed+2
  18134.     RTS
  18135. SpeedNull
  18136.     CLR.L    RunMode
  18137.     JSR    SetNormalPtrCol
  18138.     RTS
  18139.  
  18140.  
  18141. CheckMoreEffects
  18142.     MOVE.B    2(A6),D0
  18143.     AND.B    #$0F,D0
  18144.     CMP.B    #$9,D0
  18145.     BEQ    SampleOffset
  18146.     CMP.B    #$B,D0
  18147.     BEQ    PositionJump
  18148.     CMP.B    #$D,D0
  18149.     BEQ    PatternBreak
  18150.     CMP.B    #$E,D0
  18151.     BEQ    E_Commands
  18152.     CMP.B    #$F,D0
  18153.     BEQ    SetSpeed
  18154.     TST.W    (A4)
  18155.     BEQ    Return2
  18156.     CMP.B    #$C,D0
  18157.     BEQ    VolumeChange
  18158.     BRA    PerNop
  18159.  
  18160. E_Commands
  18161.     MOVE.B    n_cmdlo(A6),D0
  18162.     AND.B    #$F0,D0
  18163.     LSR.B    #4,D0
  18164.     BEQ    FilterOnOff
  18165.     CMP.B    #1,D0
  18166.     BEQ    FinePortaUp
  18167.     CMP.B    #2,D0
  18168.     BEQ    FinePortaDown
  18169.     CMP.B    #3,D0
  18170.     BEQ    SetGlissControl
  18171.     CMP.B    #4,D0
  18172.     BEQ    SetVibratoControl
  18173.     CMP.B    #5,D0
  18174.     BEQ    SetFineTune
  18175.     CMP.B    #6,D0
  18176.     BEQ    JumpLoop
  18177.     CMP.B    #7,D0
  18178.     BEQ    SetTremoloControl
  18179.     CMP.B    #8,D0
  18180.     BEQ    KarplusStrong
  18181.     CMP.B    #$E,D0
  18182.     BEQ    PatternDelay
  18183.     TST.W    (A4)
  18184.     BEQ    Return2
  18185.     CMP.B    #9,D0
  18186.     BEQ    RetrigNote
  18187.     CMP.B    #$A,D0
  18188.     BEQ    VolumeFineUp
  18189.     CMP.B    #$B,D0
  18190.     BEQ    VolumeFineDown
  18191.     CMP.B    #$C,D0
  18192.     BEQ    NoteCut
  18193.     CMP.B    #$D,D0
  18194.     BEQ    NoteDelay
  18195.     CMP.B    #$F,D0
  18196.     BEQ    FunkIt
  18197.     RTS
  18198.  
  18199. FilterOnOff
  18200.     MOVE.B    n_cmdlo(A6),D0
  18201.     AND.B    #1,D0
  18202.     ASL.B    #1,D0
  18203.     AND.B    #$FD,$BFE001
  18204.     OR.B    D0,$BFE001
  18205.     RTS    
  18206.  
  18207. SetGlissControl
  18208.     MOVE.B    n_cmdlo(A6),D0
  18209.     AND.B    #$0F,D0
  18210.     AND.B    #$F0,n_glissfunk(A6)
  18211.     OR.B    D0,n_glissfunk(A6)
  18212.     RTS
  18213.  
  18214. SetVibratoControl
  18215.     MOVE.B    n_cmdlo(A6),D0
  18216.     AND.B    #$0F,D0
  18217.     AND.B    #$F0,n_wavecontrol(A6)
  18218.     OR.B    D0,n_wavecontrol(A6)
  18219.     RTS
  18220.  
  18221. SetFineTune
  18222.     MOVE.B    n_cmdlo(A6),D0
  18223.     AND.B    #$0F,D0
  18224.     MOVE.B    D0,n_finetune(A6)
  18225.     RTS
  18226.  
  18227. JumpLoop
  18228.     TST.L    Counter
  18229.     BNE    Return2
  18230.     MOVE.B    n_cmdlo(A6),D0
  18231.     AND.B    #$0F,D0
  18232.     BEQ    SetLoop
  18233.     TST.B    n_loopcount(A6)
  18234.     BEQ    jumpcnt
  18235.     SUB.B    #1,n_loopcount(A6)
  18236.     BEQ    Return2
  18237. jmploop    MOVE.B    n_pattpos(A6),PBreakPosition
  18238.     ST    PBreakFlag
  18239.     RTS
  18240.  
  18241. jumpcnt    MOVE.B    D0,n_loopcount(A6)
  18242.     BRA    jmploop
  18243.  
  18244. SetLoop    MOVE.L    PatternPosition,D0
  18245.     LSR.L    #4,D0
  18246.     AND.B    #63,D0
  18247.     MOVE.B    D0,n_pattpos(A6)
  18248.     RTS
  18249.  
  18250. SetTremoloControl
  18251.     MOVE.B    n_cmdlo(A6),D0
  18252.     AND.B    #$0F,D0
  18253.     LSL.B    #4,D0
  18254.     AND.B    #$0F,n_wavecontrol(A6)
  18255.     OR.B    D0,n_wavecontrol(A6)
  18256.     RTS
  18257.  
  18258. KarplusStrong
  18259.     MOVEM.L    D1-D2/A0-A1,-(SP)
  18260.     MOVE.L    n_loopstart(A6),A0
  18261.     MOVE.L    A0,A1
  18262.     MOVE.W    n_replen(A6),D0
  18263.     ADD.W    D0,D0
  18264.     SUBQ.W    #2,D0
  18265. karplop    MOVE.B    (A0),D1
  18266.     EXT.W    D1
  18267.     MOVE.B    1(A0),D2
  18268.     EXT.W    D2
  18269.     ADD.W    D1,D2
  18270.     ASR.W    #1,D2
  18271.     MOVE.B    D2,(A0)+
  18272.     DBRA    D0,karplop
  18273.     MOVE.B    (A0),D1
  18274.     EXT.W    D1
  18275.     MOVE.B    (A1),D2
  18276.     EXT.W    D2
  18277.     ADD.W    D1,D2
  18278.     ASR.W    #1,D2
  18279.     MOVE.B    D2,(A0)
  18280.     MOVEM.L    (SP)+,D1-D2/A0-A1
  18281.     RTS
  18282.  
  18283. RetrigNote
  18284.     MOVE.L    D1,-(SP)
  18285.     MOVEQ    #0,D0
  18286.     MOVE.B    n_cmdlo(A6),D0
  18287.     AND.B    #$0F,D0
  18288.     BEQ    rtnend
  18289.     MOVE.L    Counter,D1
  18290.     BNE    rtnskp
  18291.     MOVE.W    n_note(A6),D1
  18292.     AND.W    #$0FFF,D1
  18293.     BNE    rtnend
  18294.     MOVE.L    Counter,D1
  18295. rtnskp    DIVU    D0,D1
  18296.     SWAP    D1
  18297.     TST.W    D1
  18298.     BNE    rtnend
  18299. DoRetrg    MOVE.W    n_dmabit(A6),$DFF096    ; Channel DMA off
  18300.     MOVE.L    n_start(A6),(A5)    ; Set sampledata pointer
  18301.     MOVE.W    n_length(A6),4(A5)    ; Set length
  18302.     MOVE.W    n_period(A6),6(A5)
  18303.     MOVEQ    #0,D0
  18304.     MOVE.B    n_volume(A6),D0
  18305. ;    MOVE.W    D0,8(A5)
  18306.     MOVE.W    DMAWait,D0
  18307. rtnloop1
  18308.     DBRA    D0,rtnloop1
  18309.     MOVE.W    n_dmabit(A6),D0
  18310.     BSET    #15,D0
  18311.     MOVE.W    D0,$DFF096
  18312.     MOVE.W    DMAWait,D0
  18313. rtnloop2
  18314.     DBRA    D0,rtnloop2
  18315.     MOVE.L    n_loopstart(A6),(A5)
  18316.     MOVE.L    n_replen(A6),4(A5)
  18317. rtnend    MOVE.L    (SP)+,D1
  18318.     RTS
  18319.  
  18320. VolumeFineUp
  18321.     TST.L    Counter
  18322.     BNE    Return2
  18323.     MOVEQ    #0,D0
  18324.     MOVE.B    n_cmdlo(A6),D0
  18325.     AND.B    #$F,D0
  18326.     BRA    VolSlideUp
  18327.  
  18328. VolumeFineDown
  18329.     TST.L    Counter
  18330.     BNE    Return2
  18331.     MOVEQ    #0,D0
  18332.     MOVE.B    n_cmdlo(A6),D0
  18333.     AND.B    #$0F,D0
  18334.     BRA    VolSlideDown2
  18335.  
  18336. NoteCut    MOVEQ    #0,D0
  18337.     MOVE.B    n_cmdlo(A6),D0
  18338.     AND.B    #$0F,D0
  18339.     CMP.L    Counter,D0
  18340.     BNE    Return2
  18341.     CLR.B    n_volume(A6)
  18342. ;    MOVE.W    #0,8(A5)
  18343.     RTS
  18344.  
  18345. NoteDelay
  18346.     MOVEQ    #0,D0
  18347.     MOVE.B    n_cmdlo(A6),D0
  18348.     AND.B    #$0F,D0
  18349.     CMP.L    Counter,D0
  18350.     BNE    Return2
  18351.     MOVE.W    (A6),D0
  18352.     AND.W    #$0FFF,D0
  18353.     BEQ    Return2
  18354.     MOVE.L    D1,-(SP)
  18355.     BRA    DoRetrg
  18356.  
  18357. PatternDelay
  18358.     TST.L    Counter
  18359.     BNE    Return2
  18360.     MOVEQ    #0,D0
  18361.     MOVE.B    n_cmdlo(A6),D0
  18362.     AND.B    #$0F,D0
  18363.     TST.B    PattDelayTime2
  18364.     BNE    Return2
  18365.     ADDQ.B    #1,D0
  18366.     MOVE.B    D0,PattDelayTime
  18367.     RTS
  18368.  
  18369. FunkIt    TST.L    Counter
  18370.     BNE    Return2
  18371.     MOVE.B    n_cmdlo(A6),D0
  18372.     AND.B    #$0F,D0
  18373.     LSL.B    #4,D0
  18374.     AND.B    #$0F,n_glissfunk(A6)
  18375.     OR.B    D0,n_glissfunk(A6)
  18376.     TST.B    D0
  18377.     BEQ    Return2
  18378. UpdateFunk
  18379.     MOVEM.L    A0/D1,-(SP)
  18380.     MOVEQ    #0,D0
  18381.     MOVE.B    n_glissfunk(A6),D0
  18382.     LSR.B    #4,D0
  18383.     BEQ    funkend
  18384.     LEA    FunkTable(PC),A0
  18385.     MOVE.B    (A0,D0.W),D0
  18386.     ADD.B    D0,n_funkoffset(A6)
  18387.     BTST    #7,n_funkoffset(A6)
  18388.     BEQ    funkend
  18389.     CLR.B    n_funkoffset(A6)
  18390.     MOVE.L    n_loopstart(A6),D0
  18391.     MOVEQ    #0,D1
  18392.     MOVE.W    n_replen(A6),D1
  18393.     ADD.L    D1,D0
  18394.     ADD.L    D1,D0
  18395.     MOVE.L    n_wavestart(A6),A0
  18396.     ADDQ.L    #1,A0
  18397.     CMP.L    D0,A0
  18398.     BLO.S    funkok
  18399.     MOVE.L    n_loopstart(A6),A0
  18400. funkok    MOVE.L    A0,n_wavestart(A6)
  18401.     MOVEQ    #-1,D0
  18402.     SUB.B    (A0),D0
  18403.     MOVE.B    D0,(A0)
  18404. funkend    MOVEM.L    (SP)+,A0/D1
  18405.     RTS
  18406.  
  18407. ;************************* End of Code ******************************
  18408.  
  18409. FunkTable dc.b 0,5,6,7,8,10,11,13,16,19,22,26,32,43,64,128
  18410.  
  18411. VibratoTable    
  18412.     dc.b   0, 24, 49, 74, 97,120,141,161
  18413.     dc.b 180,197,212,224,235,244,250,253
  18414.     dc.b 255,253,250,244,235,224,212,197
  18415.     dc.b 180,161,141,120, 97, 74, 49, 24
  18416.  
  18417. AllRightText    dc.b    'All right',0
  18418. PLSTFullText    dc.b    'Plst is full!',0
  18419. AreYouSureText    dc.b    'Are you sure?',0
  18420. NoDiskInDriveText
  18421.         dc.b    'No disk in df0!',0
  18422. WriteProtectedText
  18423.         dc.b    'Write protected',0
  18424. OprAbortedText    dc.b    'Print aborted!',0
  18425. EnterDataText    dc.b    'Enter data',0
  18426. AddingPathText    dc.b    'Adding path...',0
  18427. DiskErrorText    dc.b    'Disk error !!',0
  18428. LoadingText    dc.b    'Loading...',0
  18429. LoadingSongText    dc.b    'Loading song',0
  18430. LoadingModuleText
  18431.         dc.b    'Loading module',0
  18432. LoadingSampleText
  18433.         dc.b    'Loading sample',0
  18434. SavingText    dc.b    'Saving...',0
  18435. ;SaveSongText    dc.b    'Save song ?',0
  18436. SavingSongText    dc.b    'Saving song',0
  18437. ;SaveModuleText    dc.b    'Save module ?',0
  18438. SavingModuleText
  18439.         dc.b    'Saving module',0
  18440. ;SaveSampleText    dc.b    'Save sample ?',0
  18441. SavingSampleText
  18442.         dc.b    'Saving sample',0
  18443. LoadingPLSTText    dc.b    'Loading plst',0
  18444. SavingPLSTText    dc.b    'Saving plst',0
  18445. DeletingSongText
  18446.         dc.b    'Deleting song',0
  18447. DeletingModuleText
  18448.         dc.b    'Deleting module',0
  18449. DeletingSampleText
  18450.         dc.b    'Deleting sample',0
  18451. RenamingFileText
  18452.         dc.b    'Renaming file',0
  18453. DecrunchingText    dc.b    'Decrunching...',0
  18454. CrunchingText    dc.b    'Crunching...',0
  18455. SelectEntryText    dc.b    'Select entry',0
  18456. SelectSongText    dc.b    'Select song',0
  18457. SelectModuleText
  18458.         dc.b    'Select module',0
  18459. SelectSampleText
  18460.         dc.b    'Select sample',0
  18461. SelectFileText    dc.b    'Select file',0
  18462. ReadingDirText    dc.b    'Reading dir...',0
  18463. PosSetText    dc.b    'Position set',0
  18464. PrintingSongText
  18465.         dc.b    'Printing song',0
  18466. PrintingPLSTText
  18467.         dc.b    'Printing plst',0
  18468.  
  18469. SaveSongText    dc.b    'Save song ?',0
  18470. DeleteSongText    dc.b    'Delete song ?',0
  18471. SaveModuleText    dc.b    'Save module ?',0
  18472. DeleteModuleText dc.b    'Delete module ?',0
  18473. SaveSampleText    dc.b    'Save sample ?',0
  18474. DeleteSampleText dc.b    'Delete sample ?',0
  18475. PrintPLSTText    dc.b    'Print plst ?',0
  18476. PrintSongText    dc.b    'Print song ?',0
  18477. QuitPTText    dc.b    'Really quit ?',0
  18478. UpsampleText    dc.b    'Upsample ?',0
  18479. DownSampleText    dc.b    'Downsample ?',0
  18480. PleaseSelectText dc.b    'Please select',0
  18481. ClearSplitText    dc.b    'Clear split ?',0
  18482. ResetAllText    dc.b    'Reset config ?',0
  18483. DeletePresetText dc.b    'Delete preset ?',0
  18484. LoadPLSTText    dc.b    'Load presetlist?',0
  18485. SavePLSTText    dc.b    'Save presetlist?',0
  18486. KillSampleText    dc.b    'Kill sample ?',0
  18487. AbortLoadText    dc.b    'Abort loading ?',0
  18488. LoadConfigText    dc.b    'Load config ?',0
  18489. SaveConfigText    dc.b    'Save config ?',0
  18490.  
  18491. DiskFormatText    dc.b    'Disk format'
  18492. InProgressText    dc.b    'in progress'
  18493. FormattingCylText
  18494.         dc.b    'Formatting cyl ',0
  18495. VerifyingText    dc.b    'Verifying  cyl ',0
  18496. InitDiskText    dc.b    'Initializing',0
  18497. PlsEntNamText    dc.b    'Please enter name'
  18498. OfVolumeText    dc.b    'of volume:  ST-__',0,0
  18499.     cnop 0,2
  18500. DiskNumText1    dc.b    '0'
  18501. DiskNumText2    dc.b    '0  '
  18502. PEdDefaultPath    dc.b    'df0:',0
  18503.         dcb.b    47,0
  18504.     
  18505. PEdDefaultVol    dc.b    'st-'
  18506. SndDiskNum0    dc.b    '0'
  18507. SndDiskNum1    dc.b    '1:'
  18508.  
  18509. PresetName    dc.b    '      '
  18510. PsetNameText    dc.b    '                '
  18511.         dc.b    ' '
  18512. PsetVolText    dc.b    '  '
  18513.         dc.b    ' '
  18514. PsetLenText    dc.b    '    '
  18515.         dc.b    ' '
  18516. PsetRepeatText    dc.b    '    '
  18517.         dc.b    ' '
  18518. PsetReplenText    dc.b    '    '
  18519.  
  18520. InsertPsetText    dc.b    'ST-01:                  0 0000 0000 0002'
  18521. PsetPLSTtext    dc.b    'No.    Samplename               '
  18522.         dc.b    'Length  Repeat  RepLen',$A,$A
  18523. PsetPrtNumText    dc.b    '    :  '
  18524. PsetPrtNameText    dc.b    '                             '
  18525. PsetPrtLenText    dc.b    '        '
  18526. PsetPrtRepeatText    dc.b    '        '
  18527. PsetPrtRepLenText    dc.b    10
  18528.     dc.b    0
  18529. SongDumpText
  18530.     dc.b    9
  18531.     dc.b    'Protracker Song-Dump -- Made with '
  18532.     dc.b    'Protracker V1.2A  ',$D,$A,$A
  18533.     dc.b    9
  18534.     dc.b    'Songname:  '
  18535. CRLF_Text    dc.b    13,10
  18536. FF_Text        dc.b    12,0
  18537.  
  18538.     cnop 0,2
  18539. PatternNumText    dc.b    9,9,9,'Pattern: '
  18540. PattNumText1    dc.b    '0'
  18541. PattNumText2    dc.b    '0',$D,$A,$D,$A
  18542.  
  18543. PtotText    dc.b    9
  18544. PattXText1    dc.b    "0"
  18545. PattXText2    dc.b    "0 : "
  18546. PpText        dc.b    "                      "
  18547. Prafs        dc.b    "  0000  0000  0000    ",$D,$A
  18548. PnText2        dc.b    "        "
  18549.     cnop 0,2
  18550.         dc.b    0
  18551. PattPosText    dc.b    '00  :                                                       '
  18552. PnText        dc.b    '    ',0
  18553.  
  18554.     cnop 0,2
  18555. FmtSongDirName    dc.b    'DF0:songs',0
  18556. FmtModuleDirName    dc.b    'DF0:modules',0
  18557.  
  18558.     cnop 0,2
  18559. STText1        dc.b    'ST'
  18560. STText1Num    dc.b    '-'
  18561. STText1Number    dc.b    0,0,':'
  18562. STText2        dc.b    'ST'
  18563. STText2Num    dc.b    '-'
  18564. STText2Number    dc.b    0,0,':'
  18565. STText3        dc.b    'ST'
  18566. STText3Num    dc.b    '-'
  18567. STText3Number    dc.b    0,0,':'
  18568.  
  18569. EmptyLineText    dc.b    '                       ',0
  18570.  
  18571. FastHexTable    dc.b    '000102030405060708090A0B0C0D0E0F'
  18572.         dc.b    '101112131415161718191A1B1C1D1E1F'
  18573.         dc.b    '202122232425262728292A2B2C2D2E2F'
  18574.         dc.b    '303132333435363738393A3B3C3D3E3F'
  18575.         dc.b    '404142434445464748494A4B4C4D4E4F'
  18576.         dc.b    '505152535455565758595A5B5C5D5E5F'
  18577.         dc.b    '606162636465666768696A6B6C6D6E6F'
  18578.         dc.b    '707172737475767778797A7B7C7D7E7F'
  18579.         dc.b    '808182838485868788898A8B8C8D8E8F'
  18580.         dc.b    '909192939495969798999A9B9C9D9E9F'
  18581.         dc.b    'A0A1A2A3A4A5A6A7A8A9AAABACADAEAF'
  18582.         dc.b    'B0B1B2B3B4B5B6B7B8B9BABBBCBDBEBF'
  18583.         dc.b    'C0C1C2C3C4C5C6C7C8C9CACBCCCDCECF'
  18584.         dc.b    'D0D1D2D3D4D5D6D7D8D9DADBDCDDDEDF'
  18585.         dc.b    'E0E1E2E3E4E5E6E7E8E9EAEBECEdEEEF'
  18586.         dc.b    'F0F1F2F3F4F5F6F7F8F9FAFBFCFdFEFF'
  18587.  
  18588. TrackdiskName    dc.b    'trackdisk.device',0
  18589. InputDevName    dc.b    'input.device',0
  18590. DOSbase        dc.l    0
  18591. IntuitionBase    dc.l    0
  18592. GfxBase        dc.l    0
  18593.  
  18594. RawKeyHexTable    
  18595.     dc.b    10,1,2,3,4,5,6,7
  18596.     dc.b    8,9,32,53,51,34,18,35
  18597. RawKeyScaleTable    
  18598.     dc.b    49,33,50,34,51,52,36,53,37,54,38,55,56,40,57
  18599.     dc.b    41,58,16,2,17,3,18,19,5,20,6,21,7,22,23,9,24,10
  18600.     dc.b    25,26,12,27,70,70,0
  18601.  
  18602. KbdTransTable1    
  18603.     dc.b     0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14,15,16
  18604.     dc.b    12,13,14,15,16,17,18,19,20,21,22,23
  18605.     dc.b    24,25,26,27,28,29,30,31,36,36
  18606. KbdTransTable2
  18607.     dc.b    12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28
  18608.     dc.b    24,25,26,27,28,29,30,31,32,33,34,35
  18609.     dc.b    36,36,36,36,36,36,36,36,36,36
  18610. NoteNames1
  18611.     dc.b    'C-1 C#1 D-1 D#1 E-1 F-1 F#1 G-1 G#1 A-1 A#1 B-1 '
  18612.     dc.b    'C-2 C#2 D-2 D#2 E-2 F-2 F#2 G-2 G#2 A-2 A#2 B-2 '
  18613.     dc.b    'C-3 C#3 D-3 D#3 E-3 F-3 F#3 G-3 G#3 A-3 A#3 B-3 '
  18614. SpcNoteText
  18615.     dc.b    '--- '
  18616. NoteNames2
  18617.     dc.b    'C-1 D¡1 D-1 E¡1 E-1 F-1 G¡1 G-1 A¡1 A-1 B¡1 B-1 '
  18618.     dc.b    'C-2 D¡2 D-2 E¡2 E-2 F-2 G¡2 G-2 A¡2 A-2 B¡2 B-2 '
  18619.     dc.b    'C-3 D¡3 D-3 E¡3 E-3 F-3 G¡3 G-3 A¡3 A-3 B¡3 B-3 '
  18620.     dc.b    '--- '
  18621.  
  18622. PeriodTable
  18623. ; Tuning 0
  18624.     dc.w    856,808,762,720,678,640,604,570,538,508,480,453
  18625.     dc.w    428,404,381,360,339,320,302,285,269,254,240,226
  18626.     dc.w    214,202,190,180,170,160,151,143,135,127,120,113,0
  18627. ; Tuning 1
  18628.     dc.w    850,802,757,715,674,637,601,567,535,505,477,450
  18629.     dc.w    425,401,379,357,337,318,300,284,268,253,239,225
  18630.     dc.w    213,201,189,179,169,159,150,142,134,126,119,113,0
  18631. ; Tuning 2
  18632.     dc.w    844,796,752,709,670,632,597,563,532,502,474,447
  18633.     dc.w    422,398,376,355,335,316,298,282,266,251,237,224
  18634.     dc.w    211,199,188,177,167,158,149,141,133,125,118,112,0
  18635. ; Tuning 3
  18636.     dc.w    838,791,746,704,665,628,592,559,528,498,470,444
  18637.     dc.w    419,395,373,352,332,314,296,280,264,249,235,222
  18638.     dc.w    209,198,187,176,166,157,148,140,132,125,118,111,0
  18639. ; Tuning 4
  18640.     dc.w    832,785,741,699,660,623,588,555,524,495,467,441
  18641.     dc.w    416,392,370,350,330,312,294,278,262,247,233,220
  18642.     dc.w    208,196,185,175,165,156,147,139,131,124,117,110,0
  18643. ; Tuning 5
  18644.     dc.w    826,779,736,694,655,619,584,551,520,491,463,437
  18645.     dc.w    413,390,368,347,328,309,292,276,260,245,232,219
  18646.     dc.w    206,195,184,174,164,155,146,138,130,123,116,109,0
  18647. ; Tuning 6
  18648.     dc.w    820,774,730,689,651,614,580,547,516,487,460,434
  18649.     dc.w    410,387,365,345,325,307,290,274,258,244,230,217
  18650.     dc.w    205,193,183,172,163,154,145,137,129,122,115,109,0
  18651. ; Tuning 7
  18652.     dc.w    814,768,725,684,646,610,575,543,513,484,457,431
  18653.     dc.w    407,384,363,342,323,305,288,272,256,242,228,216
  18654.     dc.w    204,192,181,171,161,152,144,136,128,121,114,108,0
  18655. ; Tuning -8
  18656.     dc.w    907,856,808,762,720,678,640,604,570,538,508,480
  18657.     dc.w    453,428,404,381,360,339,320,302,285,269,254,240
  18658.     dc.w    226,214,202,190,180,170,160,151,143,135,127,120,0
  18659. ; Tuning -7
  18660.     dc.w    900,850,802,757,715,675,636,601,567,535,505,477
  18661.     dc.w    450,425,401,379,357,337,318,300,284,268,253,238
  18662.     dc.w    225,212,200,189,179,169,159,150,142,134,126,119,0
  18663. ; Tuning -6
  18664.     dc.w    894,844,796,752,709,670,632,597,563,532,502,474
  18665.     dc.w    447,422,398,376,355,335,316,298,282,266,251,237
  18666.     dc.w    223,211,199,188,177,167,158,149,141,133,125,118,0
  18667. ; Tuning -5
  18668.     dc.w    887,838,791,746,704,665,628,592,559,528,498,470
  18669.     dc.w    444,419,395,373,352,332,314,296,280,264,249,235
  18670.     dc.w    222,209,198,187,176,166,157,148,140,132,125,118,0
  18671. ; Tuning -4
  18672.     dc.w    881,832,785,741,699,660,623,588,555,524,494,467
  18673.     dc.w    441,416,392,370,350,330,312,294,278,262,247,233
  18674.     dc.w    220,208,196,185,175,165,156,147,139,131,123,117,0
  18675. ; Tuning -3
  18676.     dc.w    875,826,779,736,694,655,619,584,551,520,491,463
  18677.     dc.w    437,413,390,368,347,328,309,292,276,260,245,232
  18678.     dc.w    219,206,195,184,174,164,155,146,138,130,123,116,0
  18679. ; Tuning -2
  18680.     dc.w    868,820,774,730,689,651,614,580,547,516,487,460
  18681.     dc.w    434,410,387,365,345,325,307,290,274,258,244,230
  18682.     dc.w    217,205,193,183,172,163,154,145,137,129,122,115,0
  18683. ; Tuning -1
  18684.     dc.w    862,814,768,725,684,646,610,575,543,513,484,457
  18685.     dc.w    431,407,384,363,342,323,305,288,272,256,242,228
  18686.     dc.w    216,203,192,181,171,161,152,144,136,128,121,114,0
  18687.  
  18688. CursorPosTable    
  18689.     dc.b    3,6,7,8,9,10,12
  18690.     dc.b    15,16,17,18,19,21
  18691.     dc.b    24,25,26,27,28,30
  18692.     dc.b    33,34,35,36,37
  18693. UnshiftedKeymap
  18694.     dc.b    '`1234567890-=\*0'
  18695.     dc.b    'qwertyuiop[]*123'
  18696.     dc.b    'asdfghjkl;',39,'#',0,'456'
  18697.     dc.b    '<zxcvbnm,./',0,'.','789 '
  18698. ShiftedKeymap
  18699.     dc.b    '~!@#$%^&*()_+|*0'
  18700.     dc.b    'qwertyuiop{}*123'
  18701.     dc.b    'asdfghjkl:',34,'^',0,'456'
  18702.     dc.b    '>zxcvbnm<>?',0,'.','789 '
  18703.  
  18704. SongNumOfPatt    dc.w    1
  18705. NoteNamesPtr    dc.l    0
  18706. SpritePtrsPtr    dc.l    0
  18707. LineCurPosPtr    dc.l    0
  18708. NoSpritePtr    dc.l    0
  18709. CursorPosPtr    dc.l    0
  18710. Ch1SpritePtr    dc.l    0
  18711. Ch2SpritePtr    dc.l    0
  18712. Ch3SpritePtr    dc.l    0
  18713. Ch4SpritePtr    dc.l    0
  18714. PPattPos    dc.l    0
  18715. SaveEditMode    dc.l    0
  18716. EditMode    dc.l    0
  18717. RunMode        dc.l    0
  18718. CurrCmds    dc.l    0
  18719. TextBplPtr    dc.l    0
  18720. TextOffset    dc.w    0
  18721. TextLength    dc.w    0
  18722. TextLenTemp    dc.l    0
  18723. ShowTextPtr    dc.l    0
  18724. PatternNumber    dc.l    0
  18725. CurrPos        dc.l    0
  18726. CurrSpeed    dc.l    0
  18727. KeyTransTabPtr    dc.l    0
  18728. CmdOffset    dc.w    0
  18729. RawKeyCode    dc.b    0
  18730. PattRfsh    dc.b    0
  18731. MountFlag    dc.w    0
  18732. GetlineFlag    dc.w    0
  18733. LoadInProgress    dc.w    0
  18734. KbIntSave    dc.l    0
  18735. KbIntSavePtr    dc.l    0
  18736. CurrentPlayNote    dc.w    214
  18737. LineCurX    dc.w    0
  18738. LineCurY    dc.w    0
  18739. TextEndPtr    dc.l    0
  18740. ScrPattPos    dc.w    0
  18741. PattCurPos    dc.w    0
  18742. GadgRepeat    dc.w    0
  18743. WordNumber    dc.w    0
  18744. HighPattNum    dc.w    0
  18745. InsNum    dc.w    0
  18746. LastInsNum    dc.w    1
  18747. PlayInsNum    dc.w    1
  18748. HiLowInstr    dc.w    0
  18749. PEDpos        dc.w    0
  18750. PLSTpos        dc.w    0
  18751. MaxPLSTOffset    dc.l    0
  18752. PresetMarkTotal    dc.w    0
  18753. PLSTOffset    dcb.b    14*4,0
  18754. CurrentPreset    dc.w    1
  18755. UpOrDown    dc.w    0
  18756. Joy0Low        dc.w    0
  18757. Joy0High    dc.w    0
  18758. MouseX    dc.w    0
  18759. MouseY    dc.w    0
  18760. MouseX2    dc.w    0
  18761. MouseY2    dc.w    0
  18762. MouseX3    dc.w    0
  18763. MouseY3    dc.w    0
  18764. DecompMemPtr    dc.l    0
  18765. DecompMemSize    dc.l    0
  18766.  
  18767. SampleInfo    dc.w    0
  18768. si_volume    dc.w    0
  18769. si_long        dc.l    0
  18770. si_pointer    dc.l    0,0,0,0,0
  18771. SampleInfo2    dc.w    0
  18772. si_volume2    dc.w    0
  18773. si_long2    dc.l    0
  18774. si_pointer2    dc.l    0,0,0,0,0
  18775.  
  18776. LongFFFF    dc.l    0
  18777. PosJumpAssert    dc.b    0
  18778. PBreakPosition    dc.b    0
  18779. PBreakFlag    dc.b    0
  18780. LEDStatus    dc.b    0
  18781. PattDelayTime    dc.b    0
  18782. PattDelayTime2    dc.b    0
  18783. PattRfshNum    dc.l    0
  18784. DidQuantize    dc.w    0
  18785. MessagePtr    dc.l    0
  18786. FileNamePtr    dc.l    0
  18787. DiskDataPtr    dc.l    0
  18788. FileHandle    dc.l    0
  18789. DiskDataLength    dc.l    0
  18790. LowMask        dc.b    $FF
  18791. PatternPosition    dc.l    0
  18792. SongPosition    dc.l    0
  18793. Counter        dc.l    0
  18794. PatternPtr    dc.l    0
  18795. SongDataPtr    dc.l    0
  18796. SampleStarts    dcb.l    31,0
  18797. SamplePtrs    EQU    SampleStarts-4
  18798. SampleLengths    dcb.l    32,0
  18799. DMACONtemp    dc.w    0
  18800. StackSave    dc.l    0
  18801. InputDevMouse    dc.l    0,0,0
  18802. AnalyzerHeights    dcb.w    23,0
  18803. AnalyzerOpplegg    dcb.w    23,0
  18804. Action        dc.w    0
  18805. PathPtr        dc.l    0
  18806. FileLock    dc.l    0
  18807. CurrScreen    dc.w    0
  18808. SaveCurrScreen    dc.w    0
  18809. PointerCol1Save    dc.w    0
  18810. PointerCol2Save    dc.w    0
  18811. PointerCol3Save    dc.w    0
  18812. GetDecTemp    dc.b    0
  18813. UpdateTempo    dc.b    0
  18814. MoreInstrFlag    dc.w    0
  18815. SampleSortList    dcb.l    32,0
  18816. PLSTmem        dc.l    0
  18817. PresetTotal    dc.w    0
  18818. SaveScope    dc.b    0
  18819.         dc.b    0 ;free 0
  18820. DisableAnalyzer    dc.b    0
  18821. SaveDA        dc.b    0
  18822. AutoReqRunning    dc.b    0
  18823. NoSampleInfo    dc.b    0
  18824. FormatDataPtr    dc.l    0
  18825. CylinderNumber    dc.w    0
  18826. TrackdiskPort    dc.l    0,0,0,0
  18827. ProcessPtr    dc.l    0,0,0,0
  18828. DateStamp    dc.l    0,0,0,0
  18829. EnterTextFlag    dc.w    0
  18830. PresetLength    dc.w    0
  18831. PresetFineTune    dc.w    0
  18832. PresetRepeat    dc.w    0
  18833. PresetReplen    dc.w    0
  18834. PED_Action    dc.w    0
  18835. PsetNumTemp    dc.w    0
  18836. PsetPtrTemp    dc.l    0
  18837. FreeDiskSpace    dc.l    0
  18838. SplitAddress    dc.l    0
  18839. LaHeTx        dc.l    $12345678
  18840. PLSTallocsize    dc.l    0
  18841. MaxPLSTEntries2    dc.w    0
  18842.  
  18843. ;---- Setup Data ----
  18844.  
  18845. DefaultSetupData
  18846.     dc.b    'PT1.2 Configuration File',$A,0
  18847.     dc.b    'ST-00:songs'
  18848.     dcb.b    21,0
  18849.     dc.b    'ST-00:modules'
  18850.     dcb.b    19,0
  18851.     dc.b    'DF0:'
  18852.     dcb.b    28,0
  18853.     dc.b    'PRT:'
  18854.     dcb.b    28,0
  18855. DefCol    dc.w    $000,$BBB,$888,$555,$FD0,$D04,$000,$34F
  18856.     dc.b    1   ; Song Pack Mode
  18857.     dc.b    0   ; Module Pack Mode
  18858.     dc.b    0   ; Split  0=off, 1=on
  18859.     dc.b    0   ; Filter
  18860.     dc.b    0   ; TransDel
  18861.     dc.b    1   ; ShowDec
  18862.     dc.b    1   ; AutoDir
  18863.     dc.b    1   ; AutoExit
  18864.     dc.b    1   ; ModOnly
  18865.     dc.b    0   ; MIDI
  18866.     dc.b    1,$18,$18,0    ; SplitData
  18867.     dc.b    2,$1A,$18,0
  18868.     dc.b    3,$1C,$18,0
  18869.     dc.b    4,$1D,$18,0
  18870.     dc.w    20,2    ; KeyRepDelay/Speed
  18871.     dc.b    0    ; Accidental
  18872.     dc.b    0    ; not in use
  18873.     dc.b    'newshell',0    ; ExtCmd 0
  18874.     dcb.b    23,0
  18875.     dc.b    'add21k',0    ; ExtCmd 1
  18876.     dcb.b    25,0
  18877.     dc.b    'info',0    ; ExtCmd 2
  18878.     dcb.b    27,0
  18879.     dc.b    'list',0    ; ExtCmd 3
  18880.     dcb.b    27,0
  18881.     dc.b    'loadwb -debug',0 ; ExtCmd 4
  18882.     dcb.b    18,0
  18883.     dc.b    'diskmaster1.3',0 ; ExtCmd 5
  18884.     dcb.b    18,0
  18885.     dc.b    'run AudioMasterIII',0 ; ExtCmd 6
  18886.     dcb.b    13,0
  18887.     dc.b    'ced',0    ; ExtCmd 7
  18888.     dcb.b    28,0
  18889.     dc.w    0    ; Not in use
  18890.     dc.w    2500    ; Max PLST Entries
  18891.     dc.b    2,3,4,1    ; Multi Mode Next
  18892.     dc.w    $102,$202,$037,$047,$304, $F06,$C10,$C20,$E93,$A0F
  18893.     dc.b    0 ; RAW/IFF Save, 0=RAW, 1=IFF
  18894.     dc.b    1 ; IntMode, 0=VBLANK, 1=CIA
  18895.     dc.b    0 ; Override
  18896.     dc.b    0 ; Nosamples
  18897.     dc.b    0 ; BlankZero
  18898.     dc.b    1 ; ShowDirs
  18899.     dc.b    0 ; CutToBuf
  18900.     dc.b    0 ; ShowPublic
  18901.     dc.b    1 ; IFFLoop
  18902.     dc.b    0 ; HHFlag
  18903.     dc.w    125 ; Tempo
  18904.     dc.w    300 ; DMAWait
  18905.     dc.w    24  ; TuneNote (C-3)
  18906.     dc.w    $20 ; TToneVol
  18907.     dc.b    0,0,0,0,0,0,0,0 ; (Pad to 512 bytes)
  18908.     dc.b    "ST-00:" ; Protracker Path
  18909.     dcb.b    26
  18910.     dc.w    6 ; DefaultSpeed
  18911.     dc.w    $0F00,$0F00,$0F10,$0F10,$0F20,$0F20,$0F30,$0F30 ; VU-Meter
  18912.     dc.w    $0F40,$0F50,$0F60,$0F70,$0F80,$0F90,$0FA0,$0FB0 ; colors
  18913.     dc.w    $0FC0,$0FD0,$0FE0,$0FF0,$0FF0,$0EF0,$0EF0,$0DF0
  18914.     dc.w    $0DF0,$0CF0,$0CF0,$0BF0,$0BF0,$0AF0,$09F0,$09F0
  18915.     dc.w    $08F0,$08F0,$07F0,$07F0,$06F0,$06F0,$05F0,$05F0
  18916.     dc.w    $04F0,$04F0,$03F0,$03F0,$02F0,$01F0,$00F0,$00E0
  18917.  
  18918.     dc.w    $0F00,$0F10,$0F20,$0F30,$0F40,$0F50,$0F60,$0F70 ; Analyzer
  18919.     dc.w    $0F80,$0F90,$0FA0,$0FB0,$0FC0,$0FD0,$0FE0,$0FF0 ; colors
  18920.     dc.w    $0EF0,$0DF0,$0CF0,$0BF0,$0AF0,$09F0,$08F0,$07F0
  18921.     dc.w    $06F0,$05F0,$04F0,$03F0,$02F0,$01F0,$00F0,$00E0
  18922.     dc.w    $00D0,$00C0,$00B0,$00A0,$0090,$0080,$0070,$0060
  18923.     dcb.b    302  ; Pad to 1024 bytes
  18924.  
  18925. ;---- Sampler routines ----
  18926.  
  18927. _custom    EQU    $00DFF000
  18928. intreq    EQU    $0000009C
  18929. intreqr    EQU    $0000001E
  18930. intena    EQU    $0000009A
  18931. joy0dat    EQU    $0000000A
  18932. vhposr    EQU    $00000006
  18933. dmacon    EQU    $00000096
  18934. dmaconr    EQU    $00000002
  18935.  
  18936. SamInfoPtr    dc.l    0
  18937. SamInfoLen    dc.l    0
  18938. SampleNote    dc.w    24 ; C-3
  18939. ResampleNote    dc.w    24 ; C-3
  18940. SamIntSave    dc.w    0
  18941. SamDMASave    dc.w    0
  18942.  
  18943. ClearTempSampArea
  18944.     LEA    TempSampArea,A0
  18945.     MOVE.W    #379,D0
  18946.     MOVEQ    #0,D1
  18947. ctsalop    MOVE.W    D1,(A0)+
  18948.     DBRA    D0,ctsalop
  18949.     RTS
  18950.  
  18951. Sampler    CLR.B    RawKeyCode
  18952.     JSR    StopIt
  18953.     JSR    TopExit
  18954.     JSR    WaitForButtonUp
  18955.     JSR    SetWaitPtrCol
  18956.     BSR    ShowMon
  18957.     JSR    Wait_4000
  18958.     JSR    ClearRightArea
  18959.     JSR    ClearAnalyzerColors
  18960.     BSR    ClearTempSampArea
  18961.     BSR    WaitForDiskDrive
  18962.     MOVE.W    $DFF01C,SamIntSave ; intenar
  18963.     MOVE.W    #$7FFF,_custom+intena
  18964.     JSR    TurnOffVoices
  18965.     MOVE.W    SampleNote,D0
  18966.     ASL.W    #1,D0
  18967.     LEA    PeriodTable,A0
  18968.     MOVE.W    (A0,D0.W),D0
  18969.     LSR.W    #1,D0
  18970.     LEA    $00DFF000,A0
  18971.     LEA    $AA(A0),A5
  18972.     LEA    $BA(A0),A6
  18973.     MOVE.W    D0,$A6(A0)
  18974.     MOVE.W    D0,$B6(A0)
  18975.     MOVEQ.L    #$20,D0
  18976.     MOVE.W    D0,$A8(A0)
  18977.     MOVE.W    D0,$B8(A0)
  18978.     MOVEQ.L    #0,D0
  18979.     MOVE.W    D0,(A5)
  18980.     MOVE.W    D0,(A6)
  18981.     MOVE.B    #6,$00BFD200
  18982.     MOVEQ.L    #2,D0
  18983.     MOVE.B    D0,$00BFD000
  18984.     MOVE.B    #0,$00BFE301
  18985.     LEA    GraphOffsets(PC),A0
  18986.     LEA    TempSampArea,A1
  18987.     MOVE.L    TextBplPtr,A2
  18988.     LEA    $09E8-40(A2),A2
  18989.     LEA    $00BFE101,A3
  18990.     LEA    _custom+intreqr,A4
  18991.     MOVE.W    #$0180,D7
  18992.     MOVEQ.L    #6,D6
  18993.     MOVEQ.L    #10,D3
  18994. monilop2
  18995.     MOVEQ.L    #22,D5
  18996. monilop4
  18997.     MOVEQ.L    #7,D4
  18998. monilop3
  18999.     BTST    D7,(A4)
  19000.     BEQ.S    monilop3
  19001.     MOVE.W    D7,$7E(A4)
  19002.     MOVEQ.L    #0,D0
  19003.     MOVE.B    (A3),D0
  19004.     MOVE.W    D0,D1
  19005.     SUB.B    D7,D0
  19006.     MOVE.B    D0,(A5)
  19007.     MOVE.B    D0,(A6)
  19008.     LSR.W    #3,D1
  19009.     ADD.W    D1,D1
  19010.     MOVE.W    0(A0,D1.W),D0
  19011.     MOVE.W    (A1),D1
  19012.     MOVE.W    D0,(A1)+
  19013.     BCLR    D4,0(A2,D1.W)
  19014.     BSET    D4,0(A2,D0.W)
  19015.     DBRA    D4,monilop3
  19016.     ADDQ.L    #1,A2
  19017.     DBRA    D5,monilop4
  19018.     SUB.L    #23,A2
  19019.     SUB.L    #368,A1
  19020.     BTST    D6,-$0100(A3)
  19021.     BEQ    sampexit
  19022.     BTST    D3,-8(A4)
  19023.     BNE.S    monilop2
  19024.  
  19025. ;-- start sampling --
  19026.  
  19027.     MOVE.W    InsNum(PC),D1
  19028.     BEQ    sampexit
  19029.     LSL.W    #2,D1
  19030.     LEA    SamplePtrs,A0
  19031.     MOVE.L    (A0,D1.W),D0
  19032.     BEQ.S    samaok
  19033.     CLR.L    (A0,D1.W)
  19034.     MOVE.L    D0,A1
  19035.     MOVE.L    124(A0,D1.W),D0
  19036.     BEQ.S    samaok
  19037.     CLR.L    124(A0,D1.W)
  19038.     MOVE.L    4.W,A6
  19039.     JSR    LVOFreeMem(A6)
  19040. samaok    MOVE.L    #$FFFE,D6    ; try 64k
  19041. samalclop
  19042.     MOVE.L    D6,D0
  19043.     MOVE.L    #MEMF_CHIP!MEMF_CLEAR,D1
  19044.     MOVE.L    4.W,A6
  19045.     JSR    LVOAllocMem(A6)
  19046.     TST.L    D0
  19047.     BNE.S    samalcok
  19048.     SUB.L    #2048,D6    ; try 2k less
  19049.     BPL.S    samalclop
  19050.     BSR    OutOfMemErr
  19051.     BRA    sampexit
  19052.  
  19053. samalcok
  19054.     MOVE.W    InsNum(PC),D1
  19055.     LSL.W    #2,D1
  19056.     LEA    SamplePtrs(PC),A0
  19057.     MOVE.L    D0,(A0,D1.W)
  19058.     MOVE.L    D6,124(A0,D1.W)
  19059.  
  19060.     MOVE.W    $DFF002,SamDMASave
  19061.     MOVE.W    #$03FF,_custom+dmacon
  19062.     BSR    GetSampleInfo
  19063.     MOVE.L    SamInfoLen,D4
  19064.     CLR.W    $DFF100
  19065.     CLR.W    $DFF180
  19066.     MOVE.L    SamInfoPtr,A1
  19067.     LEA    _custom+intreq,A2
  19068.     LEA    $00BFE101,A3 ; parallel port
  19069.     LEA    _custom+intreqr,A4
  19070.     LEA    $DFF0BA,A6
  19071.  
  19072.     MOVE.W    #$0180,D7
  19073.     MOVEQ.L    #6,D6
  19074.     MOVEQ.L    #0,D5
  19075. samploop
  19076.     BTST    D7,(A4)
  19077.     BEQ.S    samploop
  19078.     MOVE.W    D7,(A2)
  19079.     MOVE.B    (A3),D0
  19080.     SUB.B    D7,D0
  19081.     MOVE.B    D0,(A5)
  19082.     MOVE.B    D0,(A6)
  19083.     MOVE.B    D0,(A1)+
  19084.     ADDQ.W    #1,D5
  19085.     CMP.W    D4,D5
  19086.     BEQ.S    sampend
  19087.     BTST    D6,-$0100(A3)
  19088.     BNE.S    samploop
  19089. sampend    MOVE.W    SamDMASave,D0
  19090.     OR.W    #$8000,D0
  19091.     MOVE.W    D0,$00DFF096
  19092.  
  19093.     MOVE.L    A1,D0
  19094.     SUB.L    SamInfoPtr(PC),D0
  19095.     MOVE.L    D0,SamInfoLen
  19096.  
  19097.     MOVE.L    SongDataPtr(PC),A0
  19098.     MOVE.W    InsNum(PC),D1
  19099.     MULU    #30,D1
  19100.     LEA    12(A0,D1.W),A0
  19101.     MOVE.L    SamInfoLen(PC),D0
  19102.     LSR.L    #1,D0
  19103.     MOVE.W    D0,(A0)+
  19104.     MOVE.W    #$0040,(A0)+
  19105.     CLR.W    (A0)+
  19106.     MOVE.W    #1,(A0)
  19107.  
  19108.     MOVE.L    SamInfoLen(PC),D1
  19109.     NEG.L    D1
  19110.     AND.L    #$FFFFFFF8,D1
  19111.     NEG.L    D1
  19112.     MOVE.W    InsNum(PC),D0
  19113.     ASL.W    #2,D0
  19114.     LEA    SamplePtrs,A0
  19115.     CMP.L    124(A0,D0.W),D1
  19116.     BGE.S    sampexit
  19117.     MOVE.L    124(A0,D0.W),D2
  19118.     MOVE.L    D1,124(A0,D0.W)
  19119.     SUB.L    D1,D2
  19120.     MOVE.L    0(A0,D0.W),A1
  19121.     MOVE.L    124(A0,D0.W),D0
  19122.     ADD.L    D0,A1
  19123.     MOVE.L    D2,D0
  19124.     MOVE.L    4.W,A6
  19125.     JSR    LVOFreeMem(A6)
  19126. sampexit
  19127.     MOVE.W    SamIntSave,D0
  19128.     BSET    #15,D0
  19129.     MOVE.W    D0,$DFF09A
  19130.     JSR    TurnOffVoices
  19131.     JSR    DisplayMainScreen
  19132.     BSR    ClearSamStarts
  19133.     BSR    ShowSampleInfo
  19134.     BSR    RedrawSample
  19135.     JSR    WaitForButtonUp
  19136.     CLR.W    KeyBufPos
  19137.     CLR.B    RawKeyCode
  19138.     CLR.W    ShiftKeyStatus
  19139.     JMP    Wait_4000
  19140.  
  19141. SampleNullInfo
  19142.     CLR.L    SamInfoPtr
  19143.     CLR.L    SamInfoLen
  19144.     MOVEQ    #-1,D0
  19145.     RTS    
  19146.  
  19147. GetSampleInfo
  19148.     MOVE.W    InsNum(PC),D0
  19149.     BEQ.S    SampleNullInfo
  19150.     LSL.W    #2,D0
  19151.     LEA    SamplePtrs(PC),A0
  19152.     MOVE.L    (A0,D0.W),SamInfoPtr
  19153.     MOVE.L    124(A0,D0.W),SamInfoLen
  19154.     MOVEQ    #0,D0
  19155.     RTS
  19156.  
  19157. ShowMon    SF    ScopeEnable
  19158.     ST    DisableAnalyzer
  19159.     JSR    ClearRightArea
  19160.     LEA    MonitorData,A0
  19161.     MOVE.L    #MonitorSize,D0
  19162.     MOVEQ    #-1,D4
  19163.     JMP    cgjojo
  19164.  
  19165. WaitForDiskDrive
  19166.     JSR    StorePtrCol
  19167.     MOVE.L    4.W,A6
  19168.     LEA    $15E(A6),A0    ; DeviceList
  19169.     LEA    TrackdiskName,A1    ; trackdisk.device
  19170.     JSR    LVOFindName(A6)
  19171.     MOVE.L    D0,A6
  19172.     LEA    $24(A6),A6    ; dn_GlobalVec
  19173. trdloop2
  19174.     MOVE.L    A6,A1
  19175.     MOVEQ.L    #3,D6
  19176. tdrloop    TST.L    (A1)+
  19177.     BEQ.S    tdrskip
  19178.     MOVE.L    -4(A1),A2
  19179.     BTST    #7,$0041(A2)
  19180.     BEQ.S    tdrnotset
  19181. tdrskip    DBRA    D6,tdrloop
  19182.     JMP    RestorePtrCol
  19183.  
  19184. tdrnotset
  19185.     JSR    SetDiskPtrCol
  19186.     BRA.S    trdloop2
  19187.  
  19188. ClearSamStarts
  19189.     LEA    SamplePtrs+4,A0
  19190.     MOVEQ    #30,D0
  19191. cssLoop    MOVE.L    (A0)+,D1
  19192.     BEQ    cssSkip
  19193.     MOVE.L    D1,A1
  19194.     CLR.W    (A1)
  19195. cssSkip    DBRA    D0,cssLoop
  19196.     RTS
  19197.  
  19198. GraphOffsets
  19199.     dc.w 31*40,30*40,29*40,28*40,27*40,26*40,25*40,24*40
  19200.     dc.w 23*40,22*40,21*40,20*40,19*40,18*40,17*40,16*40
  19201.     dc.w 15*40,14*40,13*40,12*40,11*40,10*40,09*40,08*40
  19202.     dc.w 07*40,06*40,05*40,04*40,03*40,02*40,01*40,00*40
  19203.  
  19204. SamNoteType    dc.w    0
  19205.  
  19206. ShowSamNote
  19207.     TST.W    SamScrEnable
  19208.     BEQ    Return2
  19209.     MOVE.L    NoteNamesPtr,A4
  19210.     MOVE.W    #237*40+36,TextOffset
  19211.     MOVE.W    SampleNote,D0
  19212.     LSL.W    #2,D0
  19213.     LEA    (A4,D0.W),A0
  19214.     MOVE.L    A0,ShowTextPtr
  19215.     MOVE.W    #4,TextLength
  19216.     BRA    ShowText
  19217.  
  19218. ShowResamNote
  19219.     TST.W    SamScrEnable
  19220.     BEQ    Return2
  19221.     MOVE.L    NoteNamesPtr,A4
  19222.     MOVE.W    #248*40+36,TextOffset
  19223.     MOVE.W    ResampleNote,D0
  19224.     LSL.W    #2,D0
  19225.     LEA    (A4,D0.W),A0
  19226.     MOVE.L    A0,ShowTextPtr
  19227.     MOVE.W    #4,TextLength
  19228.     BRA    ShowText
  19229.  
  19230. ;---- Graphics Data ----
  19231.  
  19232. FontSize    = 568
  19233. SpectrumAnaSize    = 808
  19234. ScopeSize    = 1814
  19235. SureBoxSize    = 1100
  19236. ClearBoxSize    = 1100
  19237. FormatBoxSize    = 1412
  19238. DirScreenSize    = 2861
  19239. PLSTSize    = 1728-8
  19240. Edit1Size    = 1748
  19241. Edit2Size    = 1902
  19242. Edit3Size    = 2145
  19243. SetupScreenSize    = 5468
  19244. Setup2Size    = 5074
  19245. PresetEdSize    = 5161
  19246. SampScreenSize  = 3843
  19247. MonitorSize    = 817
  19248. HelpScreenSize    = 900
  19249.  
  19250.     INCDIR    "df0:"
  19251. FontData    INCBIN "raw/ptfont.raw"
  19252.     cnop 0,2
  19253. SpectrumAnaData    INCBIN "pak/ptspectrumana.pak"
  19254.     cnop 0,2
  19255. ScopeData    INCBIN "pak/ptscope.pak"
  19256.     cnop 0,2
  19257. SureBoxData    INCBIN "raw/ptsurebox.raw"
  19258.     cnop 0,2
  19259. ClearBoxData    INCBIN "raw/ptclearbox.raw"
  19260.     cnop 0,2
  19261. FormatBoxData    INCBIN "raw/ptformatbox.raw"
  19262.     cnop 0,2
  19263. DirScreenData    INCBIN "pak/ptfilereq.pak"
  19264.     cnop 0,2
  19265. PLSTData    INCBIN "pak/ptplst.pak"
  19266.     cnop 0,2
  19267. Edit1Data    INCBIN "pak/ptedit1.pak"
  19268.     cnop 0,2
  19269. Edit2Data    INCBIN "pak/ptedit2.pak"
  19270.     cnop 0,2
  19271. Edit3Data    INCBIN "pak/ptedit3.pak"
  19272.     cnop 0,2
  19273. SetupScreenData    INCBIN "pak/ptsetup.pak"
  19274.     cnop 0,2
  19275. Setup2Data    INCBIN "pak/ptsetup2.pak"
  19276.     cnop 0,2
  19277. PresetEdData    INCBIN "pak/ptpreseted.pak"
  19278.     cnop 0,2
  19279. SampScreenData    INCBIN "pak/ptsampler.pak"
  19280.     cnop 0,2
  19281. MonitorData    INCBIN "pak/ptmonitor.pak"
  19282.     cnop 0,2
  19283. HelpScreenData    INCBIN "pak/pthelpscreen.pak"
  19284.     cnop 0,2
  19285. VolBoxData    INCBIN "raw/ptvolbox.raw"
  19286. ToggleONdata    INCBIN "raw/PTToggleON.raw"
  19287. ToggleOFFdata    INCBIN "raw/PTToggleOFF.raw"
  19288. S_BoxData    INCBIN "raw/PTLetters.raw"
  19289.  
  19290. A_BoxData    EQU    S_BoxData+22
  19291. T_BoxData    EQU    S_BoxData+44
  19292. P_BoxData    EQU    S_BoxData+66
  19293. H_BoxData    EQU    S_BoxData+88
  19294. C_BoxData    EQU    S_BoxData+110
  19295.  
  19296.  
  19297. ;************************** CHIP DATA HUNK **************************
  19298.  
  19299.     SECTION ptdata,DATA_C
  19300.  
  19301. BitplaneData    INCBIN "raw/PTMainScreen.raw"
  19302.  
  19303. TopMenusPos    EQU    BitPlaneData+55
  19304. SpectrumAnaPos    EQU    BitPlaneData+1815
  19305. FormatBoxPos    EQU    BitPlaneData+2090
  19306. SureBoxPos    EQU    BitPlaneData+2100
  19307. SamScrPos    EQU    BitPlaneData+4880
  19308. VolBoxPos    EQU    BitPlaneData+6209
  19309.  
  19310. TToneData    ; Tuning Tone (Sine Wave)
  19311.     dc.b    0,  25,  49,  71,  91, 106, 118, 126
  19312.     dc.b  127, 126, 118, 106,  91,  71,  49,  25
  19313.     dc.b    0, -25, -49, -71, -91,-106,-118,-126
  19314.     dc.b -127,-126,-118,-106, -91, -71, -49, -25
  19315.  
  19316. CopList    dc.w    $0120    ; Sprite 0 high
  19317.     dc.w    0
  19318.     dc.w    $0122    ; Sprite 0 low
  19319.     dc.w    0
  19320.     dc.w    $0124    ; Sprite 1 high
  19321.     dc.w    0
  19322.     dc.w    $0126    ; Sprite 1 low
  19323.     dc.w    0
  19324.     dc.w    $0128    ; Sprite 2 high
  19325.     dc.w    0
  19326.     dc.w    $012A    ; Sprite 2 low
  19327.     dc.w    0
  19328.     dc.w    $012C    ; Sprite 3 high
  19329.     dc.w    0
  19330.     dc.w    $012E    ; Sprite 3 low
  19331.     dc.w    0
  19332.     dc.w    $0130    ; Sprite 4 high
  19333.     dc.w    0
  19334.     dc.w    $0132    ; Sprite 4 low
  19335.     dc.w    0
  19336.     dc.w    $0134    ; Sprite 5 high
  19337.     dc.w    0
  19338.     dc.w    $0136    ; Sprite 5 low
  19339.     dc.w    0
  19340.     dc.w    $0138    ; Sprite 6 high
  19341.     dc.w    0
  19342.     dc.w    $013A    ; Sprite 6 low
  19343.     dc.w    0
  19344.     dc.w    $013C    ; Sprite 7 high
  19345.     dc.w    0
  19346.     dc.w    $013E    ; Sprite 7 low
  19347.     dc.w    0
  19348. CopListBitplanes
  19349.     dc.w    $00E0    ; Bitplane 0 high
  19350.     dc.w    0
  19351.     dc.w    $00E2    ; Bitplane 0 low
  19352.     dc.w    0
  19353.     dc.w    $00E4    ; Bitplane 1 high
  19354.     dc.w    0
  19355.     dc.w    $00E6    ; Bitplane 1 low
  19356.     dc.w    0
  19357.     dc.w    $00E8    ; Bitplane 2 high
  19358. NoteBplptrHigh
  19359.     dc.w    0
  19360.     dc.w    $00EA    ; Bitplane 2 low
  19361. NoteBplptrLow
  19362.     dc.w    0
  19363. CopListColors
  19364.     dc.w    $01A2    ; Color 17
  19365.     dc.w    $0AAA
  19366.     dc.w    $01A4    ; Color 18
  19367.     dc.w    $0888
  19368.     dc.w    $01A6    ; Color 19
  19369.     dc.w    $0666
  19370.     dc.w    $01A0    ; Color 16
  19371.     dc.w    0
  19372.     dc.w    $0180    ; Color 0
  19373. CopCol0    dc.w    0
  19374.     dc.w    $0182    ; Color 1
  19375.     dc.w    $0AAA
  19376.     dc.w    $0184    ; Color 2
  19377.     dc.w    $0777
  19378.     dc.w    $0186    ; Color 3
  19379.     dc.w    $0444
  19380.     dc.w    $0188    ; Color 4
  19381.     dc.w    $0CCC
  19382.     dc.w    $018A    ; Color 5
  19383.     dc.w    $0A00
  19384.     dc.w    $018C    ; Color 6
  19385.     dc.w    $0000
  19386.     dc.w    $018E    ; Color 7
  19387.     dc.w    $004D
  19388.     dc.w    $01AE    ; Color 23
  19389.     dc.w    $0A00
  19390.     dc.w    $01AA    ; Color 21
  19391.     dc.w    $0700
  19392.     dc.w    $01AC    ; Color 22
  19393.     dc.w    $0400
  19394.     dc.w    $008E    ; Display Window Start
  19395.     dc.w    $2C81    ; 2C / 81
  19396.     dc.w    $0090    ; Display Window Stop
  19397.     dc.w    $2CC1    ; 2C / C1
  19398.     dc.w    $0092    ; Display Data Fetch Start
  19399.     dc.w    $0038
  19400.     dc.w    $0094    ; Display Data Fetch Stop
  19401.     dc.w    $00D0
  19402.     dc.w    $0108
  19403.     dc.w    0
  19404.     dc.w    $010A
  19405.     dc.w    0
  19406.     dc.w    $0102    ; bplcon1
  19407.     dc.w    0
  19408.     dc.w    $0104    ; bplcon2
  19409.     dc.w    $0024
  19410.     dc.w    $2C07    ; Wait for line $2C, pos $07
  19411.     dc.w    $FFFE
  19412.     dc.w    $0100    ; bplcon0
  19413.     dc.w    $3200
  19414. CopListAnalyzer
  19415.     dcb.w    320,0
  19416. CopListInsPos
  19417.     dc.w    $B807    ; Wait for line $88, pos $07
  19418.     dc.w    $FFFE
  19419.     dc.w    $0100    ; bplcon0
  19420.     dc.w    $2200
  19421. CopListBpl4
  19422.     dc.w    $00E8    ; Bitplane 4 high
  19423.     dc.w    0
  19424.     dc.w    $00EA    ; Bitplane 4 low
  19425.     dc.w    0
  19426.     dc.w    $0188    ; Color 4
  19427. NoteCol    dc.w    $004D
  19428.     dc.w    $B907    ; Wait for line $89, pos $07
  19429.     dc.w    $FFFE
  19430.     dc.w    $0100    ; bplcon0
  19431.     dc.w    $3200
  19432. CopListMark2    
  19433.     dcb.w    672,0
  19434.  
  19435.     dc.w    $E907    ; Wait for line $E9, pos $07
  19436.     dc.w    $FFFE
  19437.     dc.w    $010A    ; bpl2mod
  19438.     dc.w    $FFD8
  19439.     dc.w    $0108    ; bpl1mod
  19440.     dc.w    $FFD8
  19441.     dc.w    $EA07    ; Wait for line $EA, pos $07
  19442.     dc.w    $FFFE
  19443.     dc.w    $0104    ; bplcon2
  19444.     dc.w    $0010
  19445.     dc.w    $010A    ; bpl2mod
  19446.     dc.w    0
  19447.     dc.w    $0108    ; bpl1mod
  19448.     dc.w    0
  19449.     dc.w    $EB07    ; Wait for line $E8, pos $07
  19450.     dc.w    $FFFE
  19451.     dc.w    $010A    ; bpl2mod
  19452.     dc.w    $FFD8
  19453.     dc.w    $0108    ; bpl1mod
  19454.     dc.w    $FFD8
  19455.     dc.w    $EC07    ; Wait for line $EC, pos $07
  19456.     dc.w    $FFFE
  19457.     dc.w    $010A    ; bpl2mod
  19458.     dc.w    0
  19459.     dc.w    $0108    ; bpl1mod
  19460.     dc.w    0
  19461.     dc.w    $ED07    ; Wait for line $ED, pos $07
  19462.     dc.w    $FFFE
  19463.     dc.w    $010A    ; bpl2mod
  19464.     dc.w    $FFD8
  19465.     dc.w    $0108    ; bpl1mod
  19466.     dc.w    $FFD8
  19467.     dc.w    $EE07    ; Wait for line $EE, pos $07
  19468.     dc.w    $FFFE
  19469.     dc.w    $010A    ; bpl2mod
  19470.     dc.w    0
  19471.     dc.w    $0108    ; bpl1mod
  19472.     dc.w    0
  19473.     dc.w    $EF07    ; Wait for line $EF, pos $07
  19474.     dc.w    $FFFE
  19475.     dc.w    $010A    ; bpl2mod
  19476.     dc.w    $FFD8
  19477.     dc.w    $0108    ; bpl1mod
  19478.     dc.w    $FFD8
  19479.     dc.w    $F007    ; Wait for line $F0, pos $07
  19480.     dc.w    $FFFE
  19481.     dc.w    $010A    ; bpl2mod
  19482.     dc.w    0
  19483.     dc.w    $0108    ; bpl1mod
  19484.     dc.w    0
  19485.     dc.w    $F107    ; Wait for line $F1, pos $07
  19486.     dc.w    $FFFE
  19487.     dc.w    $010A    ; bpl2mod
  19488.     dc.w    $FFD8
  19489.     dc.w    $0108    ; bpl1mod
  19490.     dc.w    $FFD8
  19491.     dc.w    $F207    ; Wait for line $F2, pos $07
  19492.     dc.w    $FFFE
  19493.     dc.w    $010A    ; bpl2mod
  19494.     dc.w    0
  19495.     dc.w    $0108    ; bpl1mod
  19496.     dc.w    0
  19497.     dc.w    $F307    ; Wait for line $F3, pos $07
  19498.     dc.w    $FFFE
  19499.     dc.w    $010A    ; bpl2mod
  19500.     dc.w    $FFD8
  19501.     dc.w    $0108    ; bpl1mod
  19502.     dc.w    $FFD8
  19503.     dc.w    $F407    ; Wait for line $F4, pos $07
  19504.     dc.w    $FFFE
  19505.     dc.w    $010A    ; bpl2mod
  19506.     dc.w    0
  19507.     dc.w    $0108    ; bpl1mod
  19508.     dc.w    0
  19509.     dc.w    $F507    ; Wait for line $F5, pos $07
  19510.     dc.w    $FFFE
  19511.     dc.w    $010A    ; bpl2mod
  19512.     dc.w    $FFD8
  19513.     dc.w    $0108    ; bpl1mod
  19514.     dc.w    $FFD8
  19515.     dc.w    $F607    ; Wait for line $F6, pos $07
  19516.     dc.w    $FFFE
  19517.     dc.w    $010A    ; bpl2mod
  19518.     dc.w    0
  19519.     dc.w    $0108    ; bpl1mod
  19520.     dc.w    0
  19521.     dc.w    $01B2    ; Color 1
  19522.     dc.w    0
  19523.     dc.w    $01B4    ; Color 2
  19524.     dc.w    0
  19525.     dc.w    $01B6    ; Color 3
  19526.     dc.w    0
  19527.     dc.w    $01BA    ; Color 5
  19528.     dc.w    0
  19529.     dc.w    $01BC    ; Color 6
  19530.     dc.w    0
  19531.     dc.w    $01BE    ; Color 7
  19532.     dc.w    0
  19533.     dc.w    $FFDF    ; Wait for line $FF, pos $DF
  19534.     dc.w    $FFFE
  19535.     dc.w    $2907    ; Wait for line $29, pos $07
  19536.     dc.w    $FFFE
  19537.     dc.w    $0100    ; bplcon0
  19538.     dc.w    $2200
  19539.     dc.w    $2C07    ; Wait for line $2C, pos $07
  19540.     dc.w    $FFFE
  19541.     dc.w    $0100    ; bplcon0
  19542.     dc.w    $0200
  19543.     dc.w    $FFFF    ; Wait for line $FF, pos $FF
  19544.     dc.w    $FFFE    ; End of copperlist
  19545.  
  19546.  
  19547. CopList2
  19548.     dc.w    $B607    ; Wait for line $B6, pos $07
  19549.     dc.w    $FFFE
  19550.     dc.w    $0100    ; bplcon0
  19551.     dc.w    $2200
  19552. CopList2Bpl4Ptr
  19553.     dc.w    $00E8    ; Bitplane 4 high
  19554.     dc.w    0
  19555.     dc.w    $00EA    ; Bitplane 4 low
  19556.     dc.w    0
  19557.     dc.w    $0188    ; Color 4
  19558.     dc.w    $004D
  19559.     dc.w    $01B2    ; LoopSprite color
  19560.     dc.w    $00F0
  19561.     dc.w    $01BA    ; PlayPos Sprite color
  19562.     dc.w    $00FF
  19563.     dc.w    $B707    ; Wait for line $B7, pos $07
  19564.     dc.w    $FFFE
  19565.     dc.w    $0100    ; bplcon0
  19566.     dc.w    $3200
  19567.     dc.w    $FFDF    ; Wait for line $FF, pos $DF
  19568.     dc.w    $FFFE
  19569.     dc.w    $2907    ; Wait for line $29, pos $07
  19570.     dc.w    $FFFE
  19571.     dc.w    $0100    ; bplcon0
  19572.     dc.w    $2200
  19573.     dc.w    $2C07    ; Wait for line $2C, pos $07
  19574.     dc.w    $FFFE
  19575.     dc.w    $0100    ; bplcon0
  19576.     dc.w    $0200
  19577.     dc.w    $FFFF    ; Wait for line $FF, pos $FF
  19578.     dc.w    $FFFE    ; End of copperlist
  19579.  
  19580.  
  19581. PointerSpriteData
  19582.     dc.w    0,0
  19583.     dc.w    $FFFF,$FFFF,$8002,$FFFE,$BFF4,$C00C,$BFE8,$C018
  19584.     dc.w    $BFD0,$C030,$BFE8,$C018,$BFF4,$C00C,$BFFA,$C006
  19585.     dc.w    $BFFD,$C003,$BFFA,$C006,$B7F4,$C80C,$ABE8,$DC18
  19586.     dc.w    $95D0,$F630,$A2A0,$E360,$C140,$C1C0,$8080,$8080
  19587. NoSpriteData
  19588.     dc.w    0,0,0,0
  19589. CursorSpriteData
  19590.     dc.w    0,0
  19591.     dc.w    $FFE0,$FFE0,$FFE0,$FFE0,$8020,$0000,$8020,$0000
  19592.     dc.w    $8020,$0000,$8020,$0000,$8020,$0000,$8020,$0000
  19593.     dc.w    $8020,$0000,$8020,$0000,$8020,$0000,$8020,$0000
  19594.     dc.w    $0000,$FFE0,$0000,$FFE0
  19595.     dc.w    0,0
  19596. LineCurSpriteData
  19597.     dc.w    0,0,$0000,$FE00,$0000,$FE00,$0000,$0000,0,0
  19598. VUSpriteData1
  19599.     dc.w    $E95B,$EA01
  19600.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19601.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19602.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19603.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19604.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19605.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19606.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19607.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19608.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19609.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19610.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19611.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19612.     dc.w    0,0
  19613. VUSpriteData2
  19614.     dc.w    $E97F,$EA01
  19615.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19616.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19617.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19618.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19619.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19620.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19621.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19622.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19623.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19624.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19625.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19626.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19627.     dc.w    0,0
  19628. VUSpriteData3
  19629.     dc.w    $E9A3,$EA01
  19630.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19631.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19632.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19633.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19634.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19635.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19636.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19637.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19638.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19639.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19640.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19641.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19642.     dc.w    0,0
  19643. VUSpriteData4
  19644.     dc.w    $E9C7,$EA01
  19645.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19646.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19647.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19648.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19649.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19650.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19651.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19652.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19653.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19654.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19655.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19656.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  19657.     dc.w    0,0
  19658. LoopSpriteData1
  19659.     dc.w 0,0
  19660.     dc.w $F000,0,$F000,0,$F000,0,$F000,0,$1000,0,$1000,0,$1000,0,$1000,0
  19661.     dc.w $1000,0,$1000,0,$1000,0,$1000,0,$1000,0,$1000,0,$1000,0,$1000,0
  19662.     dc.w $1000,0,$1000,0,$1000,0,$1000,0,$1000,0,$1000,0,$1000,0,$1000,0
  19663.     dc.w $1000,0,$1000,0,$1000,0,$1000,0,$1000,0,$1000,0,$1000,0,$7000,0
  19664.     dc.w $1000,0,$1000,0,$1000,0,$1000,0,$1000,0,$1000,0,$1000,0,$1000,0
  19665.     dc.w $1000,0,$1000,0,$1000,0,$1000,0,$1000,0,$1000,0,$1000,0,$1000,0
  19666.     dc.w $1000,0,$1000,0,$1000,0,$1000,0,$1000,0,$1000,0,$1000,0,$1000,0
  19667.     dc.w $1000,0,$1000,0,$1000,0,$1000,0,$1000,0,$1000,0,$1000,0,$1000,0
  19668.     dc.w 0,0
  19669. LoopSpriteData2
  19670.     dc.w 0,0
  19671.     dc.w $F000,0,$F000,0,$F000,0,$F000,0,$8000,0,$8000,0,$8000,0,$8000,0
  19672.     dc.w $8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0
  19673.     dc.w $8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0
  19674.     dc.w $8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$E000,0
  19675.     dc.w $8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0
  19676.     dc.w $8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0
  19677.     dc.w $8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0
  19678.     dc.w $8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0
  19679.     dc.w 0,0
  19680. PlayPosSpriteData
  19681.     dc.w 0,0
  19682.     dc.w $8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0
  19683.     dc.w $8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0
  19684.     dc.w $8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0
  19685.     dc.w $8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0
  19686.     dc.w $8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0
  19687.     dc.w $8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0
  19688.     dc.w $8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0
  19689.     dc.w $8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0
  19690.     dc.w 0,0
  19691.  
  19692. ;******** BSS HUNK ********
  19693.  
  19694.     SECTION ptbss,BSS
  19695.  
  19696. FileInfoBlock    ds.b    256 ;,0
  19697. FIB_EntryType    EQU    FileInfoBlock+4
  19698. FIB_FileName    EQU    FileInfoBlock+8
  19699. FIB_FileSize    EQU    FileInfoBlock+124
  19700. FIB_DateStamp    EQU    FileInfoBlock+132
  19701.  
  19702. InfoData    ds.b    36
  19703. TopMenusBuffer    ds.b    2200
  19704. TextDataBuffer    ds.b    546  
  19705. TrackBuffer    ds.b    256
  19706. CmdsBuffer    ds.b    256
  19707. BlockBuffer    ds.b    256
  19708. PatternBuffer    ds.b    1024
  19709. UndoBuffer    ds.b    1024
  19710.  
  19711. TrackdiskIOExtTD
  19712.         ds.w    1
  19713.         ds.l    3
  19714. TDPortPtr    ds.l    1
  19715.         ds.w    1
  19716. Fmt_tja        ds.w    1
  19717.         ds.l    2
  19718.         ds.b    3
  19719. Fmt_hmmm    ds.b    1
  19720.         ds.w    1
  19721. FmtDataSize    ds.w    2
  19722. FmtDataPtr    ds.w    2
  19723. FmtDiskOffset    ds.l    9
  19724.  
  19725. SplitTransTable    ds.b    38
  19726. SplitInstrTable    ds.b    38
  19727.  
  19728. ModulesPath2    ds.b    64
  19729. SongsPath2    ds.b    64
  19730. SamplePath2    ds.b    64
  19731.  
  19732.         ds.l    1
  19733.  
  19734. SetupData    ds.b    26
  19735. SongsPath    ds.b    32
  19736. ModulesPath    ds.b    32
  19737. SamplePath    ds.b    32
  19738. PrintPath    ds.b    32
  19739. ColorTable    ds.w    8
  19740. PackMode    ds.b    1
  19741. ModPackMode    ds.b    1
  19742. SplitFlag    ds.b    1
  19743. FilterFlag    ds.b    1
  19744. TransDelFlag    ds.b    1
  19745. ShowDecFlag    ds.b    1
  19746. AutoDirFlag    ds.b    1
  19747. AutoExitFlag    ds.b    1
  19748. ModOnlyFlag    ds.b    1
  19749. MIDIFlag    ds.b    1
  19750. SplitData    ds.b    4
  19751.         ds.b    4
  19752.         ds.b    4
  19753.         ds.b    4
  19754. KeyRepDelay    ds.w    1
  19755. KeyRepSpeed    ds.w    1
  19756. Accidental    ds.b    1
  19757.         ds.b    1
  19758. ExtCommands    ds.b    32*8 ; 256 bytes
  19759. MaxDirEntries    ds.w    1
  19760. MaxPLSTEntries    ds.w    1
  19761. MultiModeNext    ds.b    4
  19762. EffectMacros    ds.w    10
  19763. RAWIFFMode    ds.b    1
  19764. IntMode        ds.b    1
  19765. OverrideFlag    ds.b    1
  19766. NosamplesFlag    ds.b    1
  19767. BlankZeroFlag    ds.b    1
  19768. ShowDirsFlag    ds.b    1
  19769. ShowPublicFlag    ds.b    1
  19770. CutToBufFlag    ds.b    1
  19771. IFFLoopFlag    ds.b    1
  19772. HHFlag        ds.b    1
  19773. Tempo        ds.w    1
  19774. DMAWait        ds.w    1
  19775. TuneNote    ds.w    1
  19776. TToneVol    ds.w    1
  19777. SalvageAddress    ds.b    8
  19778. PTPath        ds.b    32  ; 512 bytes
  19779. DefaultSpeed    ds.w    1
  19780. VUmeterColors    ds.w    48
  19781. AnalyzerColors    ds.w    40
  19782.         ds.b    302 ; Pad to 1024 bytes
  19783.  
  19784. HelpTextIndex    ds.l    256
  19785. HelpTextData    ds.b    656
  19786.  
  19787. InpEvPort    ds.b    34
  19788. InpEvIOReq    ds.b    48
  19789.  
  19790. ScopeInfo    ds.b    20*4
  19791. ScopeSamInfo    ds.b    16*31
  19792. BlankSample    ds.b    320
  19793. FileName    ds.b    96
  19794. NewFileName    ds.b    96
  19795. SampleFileName    ds.b    28
  19796. PresetNameText    ds.b    22
  19797. DirInputName    ds.b    30
  19798. NewInputName    ds.b    30
  19799. TempSampArea    ds.w    380
  19800. SaveColors    ds.w    40+48
  19801.  
  19802. END
  19803.  
  19804. ; /* End of File */
  19805.